鱼C论坛

 找回密码
 立即注册
查看: 601|回复: 1

小白求助

[复制链接]
发表于 2023-12-10 19:09:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
求两个实数相加的和。
题目中输入输出里出现的浮点数都有如下的形式:
P1P2...Pi.Q1Q2...Qj。对于整数部分,P1P2...Pi是一个非负整数且当整数部分不为0时,P1不等于0;对于小数部分,Qj不等于0。

输入
2行,每行是一个加数。每个加数的长度不超过100。
输出
一行,即相应的和。输出保证一定是一个小数部分不为0的实数。
样例输入 复制
0.111111111111111111111111111111
0.111111111111111111111111111111
样例输出 复制
0.222222222222222222222222222222
#include <stdio.h>
#include <string.h>
#pragma warning(disable:4996)
int main(void)
{
        char dig1[101], dig2[101];
        int i;

        scanf("%s%s", dig1, dig2);
        char* p1 = strchr(dig1, '.');
        char* p2 = strchr(dig2, '.');
        int loc1 = p1 - dig1 + 1;
        int loc2 = p2 - dig2 + 1;
        int diff = (loc1 >= loc2) ? loc1 : loc2;
        char dig[101];

        for (i = 0; dig1[i] != '\0' && dig2[i] != '\0'; i++) {
                if (loc1 >= loc2) {
                        if (i < diff) {
                                dig[i] = dig1[i];
                        }
                        else if (i == loc1) {
                                dig[i] = '.';
                        }
                        else {
                                dig[i] = dig1[i - diff] + dig2[i] - '0';
                        }
                }
                else {
                        if (i < diff) {
                                dig[i] = dig2[i];
                        }
                        else if (i == loc2) {
                                dig[i] = '.';
                        }
                        else {
                                dig[i] = dig1[i] + dig2[i - diff] - '0';
                        }
                }
        }

        printf("%s", dig);

        return 0;
}
为什么按要求输入后得到的结果是0../2222222222222222222222222222烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫03B?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-10 19:10:21 | 显示全部楼层
你的代码有几个问题导致了结果不正确:

1. `scanf`函数的第二个参数要传入字符串的地址,而你将`dig1`和`dig2`直接传入了。应该改为`scanf("%s %s", &dig1, &dig2)`。

2. 字符指针变量`p1`和`p2`应该初始化为`NULL`,不然会导致`strchr`函数无法正常工作。应该改为`char* p1 = NULL; char* p2 = NULL;`。

3. 在进行字符相加的时候,你直接将`dig1`和`dig2`相加,并没有将其转换为数字进行相加操作。应该改为`dig = dig1 + dig2 - '0'`。

以下是修改后的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(void)
  4. {
  5.         char dig1[101], dig2[101];
  6.         int i;
  7.         scanf("%s%s", dig1, dig2);
  8.         char* p1 = NULL;
  9.         char* p2 = NULL;
  10.         p1 = strchr(dig1, '.');
  11.         p2 = strchr(dig2, '.');
  12.         int loc1 = p1 - dig1 + 1;
  13.         int loc2 = p2 - dig2 + 1;
  14.         int diff = (loc1 >= loc2) ? loc1 : loc2;
  15.         char dig;
  16.         for (i = 0; dig1[i] != '\0' && dig2[i] != '\0'; i++) {
  17.                 if (loc1 >= loc2) {
  18.                         if (i < diff) {
  19.                                 dig = dig1[i];
  20.                         }
  21.                         else if (i == loc1 - 1) {
  22.                                 dig = '.';
  23.                         }
  24.                         else {
  25.                                 dig = dig1[i] + dig2[i] - '0';
  26.                         }
  27.                 }
  28.                 else {
  29.                         if (i < diff) {
  30.                                 dig = dig2[i];
  31.                         }
  32.                         else if (i == loc2 - 1) {
  33.                                 dig = '.';
  34.                         }
  35.                         else {
  36.                                 dig = dig1[i] + dig2[i] - '0';
  37.                         }
  38.                 }
  39.                 printf("%c", dig);
  40.         }
  41.         return 0;
  42. }
复制代码

希望可以帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 21:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表