其实它大概的思路如下:
计算出两个大数的长度,并记录最大长度
在共同长度内进行计算,分为进位和不进位两种情况
根据长度较大的大数长出的部分粘到结果,再根据进位情况调整
输出结果
其实个人觉得他的思路虽然没有错,但不够清晰,可以进行一定的改进
#include
int main() {
char addend1[1001] = {0};
char addend2[1001] = {0};
char result[1001] = {0};
int length1, length2, resultLength;
int carryOver = 0;
int i, mark;
printf("请输入第一个加数");
scanf("%s", &addend1);
printf("请输入第二个加数");
scanf("%s", &addend2);
for (length1 = 0; addend1[length1]; length1++); // 注意是以分号结尾,求出第一个数的长度
length1--; // 因为后面是计算到length1-1,所以要减1
for (length2 = 0; addend2[length2]; length2++); // 求出第二个数的长度
length2--;
resultLength = length1 > length2 ? length1 : length2; // 记录最大长度
for (i = 0; i <= resultLength; i++) { // 在最大长度内进行计算
if((i <= length1) && (i <= length2)) { // 如果两个数在这个位置都有数
result[resultLength - i] = addend1[length1 - i] - '0' + addend2[length2 - i] + carryOver; // 计算该位的值,为两个加数的值之和再加上进位
if(result[resultLength - i] > '9') { // 如果需要进位
carryOver = 1; // 标记有进位,且为1
result[resultLength - i] -= 10; // 减去进1位所需要的10
} else {
carryOver = 0; // 标记无进位
}
} else { // 如果两个数最多只有一个数在这个位置有值,则退出循环
break;
}
}
mark = i; // 记录一个数比另一个数多出的开始位置
if (i <= length1) { // 如果是第一个数多出的话,那根据第一个数多出的部分计算
while (i <= length1) {
result[resultLength - i] = addend1[length1 - i];
i++;
}
}
if (i <= length2) { // 如果是第二个数的话,则根据第二个数计算
while (i <= length2) {
result[resultLength - i] = addend2[length2 - i];
i++;
}
}
for(i = mark; carryOver; i++) { // 如果在多出的位置有进位的话,则根据进位一步一步向前进位,直至没有进位为止
result[resultLength - i] += 1;
if (result[resultLength - i] > '9') {
result[resultLength - i] -= 10;
} else {
if (i > resultLength) {
printf("1");
}
break;
}
}
for (i = 0; i <= resultLength; i++) { // 输出结果
if (result[i]) {
printf("%c", result[i]);
}
}
return 0;
}
欢迎追问,满意请采纳,谢谢
其实它大概的思路如下:
计算出两个大数的长度,并记录最大长度
在共同长度内进行计算,分为进位和不进位两种情况
根据长度较大的大数长出的部分粘到结果,再根据进位情况调整
输出结果
其实个人觉得他的思路虽然没有错,但不够清晰,可以进行一定的改进
for(i=0;i0;i--){if(c[0]==c[i])break;elsecontinue;}其次这里,你是想判断改数组的最后一位么·······但是假设这个数组不是回文数呢???这样的话你是算不出最后一位的······,你可以在输入的时候直接判断结束的时候加个a[i]='\0'结束符,加在数组最后一位的后一位,然后你可以用strlen(a)来判断长度,或者再输入的时候你就可以用i统计长度for(i=0,i;j>=i;i++,j--){if(c[i]==c[j])continue;else{printf("wrong\n");break;}}printf("yes\n");最后这一段······,假设是回文数没问题,不是的呢?,执行printf("wrong\n");这段以后依旧会执行printf("yes\n");这一段········,所以这里肯定是有问题的可以在printf("yes\n");这段前面加个判断,如果输出过wrong以后就不输出yes了····大概的话f=1;for(i=0,i;j>=i;i++,j--){if(c[i]==c[j])continue;else{f=0;printf("wrong\n");break;}}if(f)printf("yes\n");好吧,大概就是这样了·······,如果还有不懂的话可以追问
这个实在太长了