小白求助
题目描述求两个实数相加的和。
题目中输入输出里出现的浮点数都有如下的形式:
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, dig2;
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;
for (i = 0; dig1 != '\0' && dig2 != '\0'; i++) {
if (loc1 >= loc2) {
if (i < diff) {
dig = dig1;
}
else if (i == loc1) {
dig = '.';
}
else {
dig = dig1 + dig2 - '0';
}
}
else {
if (i < diff) {
dig = dig2;
}
else if (i == loc2) {
dig = '.';
}
else {
dig = dig1 + dig2 - '0';
}
}
}
printf("%s", dig);
return 0;
}
为什么按要求输入后得到的结果是0../2222222222222222222222222222烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫03B? 你的代码有几个问题导致了结果不正确:
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'`。
以下是修改后的代码:
#include <stdio.h>
#include <string.h>
int main(void)
{
char dig1, dig2;
int i;
scanf("%s%s", dig1, dig2);
char* p1 = NULL;
char* p2 = NULL;
p1 = strchr(dig1, '.');
p2 = strchr(dig2, '.');
int loc1 = p1 - dig1 + 1;
int loc2 = p2 - dig2 + 1;
int diff = (loc1 >= loc2) ? loc1 : loc2;
char dig;
for (i = 0; dig1 != '\0' && dig2 != '\0'; i++) {
if (loc1 >= loc2) {
if (i < diff) {
dig = dig1;
}
else if (i == loc1 - 1) {
dig = '.';
}
else {
dig = dig1 + dig2 - '0';
}
}
else {
if (i < diff) {
dig = dig2;
}
else if (i == loc2 - 1) {
dig = '.';
}
else {
dig = dig1 + dig2 - '0';
}
}
printf("%c", dig);
}
return 0;
}
希望可以帮到你!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]