C 对我不友好。我正在编写一个程序来计算两个数字的总和。由于输入的数字非常大,所以我尝试使用 char 数组来计算。我想知道可能会出现什么问题,因为有时它有效,有时则不起作用。
我的代码是这样的:
if (len[0]>=len[1]){...}
else{
for (int i=0 ;i<len[1];i++){
if (i <=len[0]){
temp[i] = (digits[0][i] + digits[1][i] + carry) % 10;
carry = (digits[0][i] + digits[1][i] + carry) / 10;
}else{
temp[i] = (digits[1][i] + carry) % 10;
carry = (digits[1][i] + carry) / 10;
}}
if (carry==1){
temp[len[1]++]=1;
}
for (int i=0,j=len[1]-1; i <len[1];i++,j--){
sum[j]=temp[i]+'0';
}
它几乎适用于所有情况,直到我输入 1 和 999 它给出 220 而不是 1000。
我不确定为什么该程序仅在这种情况下不起作用。
最佳答案
首先,您应该处理缩进和括号中的代码。 它可以帮助您和我们阅读您的代码。在提供的代码中,缩进不清晰也不正确,如果提供的代码是这个,则可能是第一个问题。
使用defensive programming 。这里的“j”可能小于 0。
在 for 循环中调用
printf("%d\n", sum[j]);
。
for(int i=0,j=len[1]-1; i <len[1];i++,j--)
{
sum[j]=temp[i]+'0';
printf("%d\n",sum[j]);
}
- 如果你想打印总和,你应该这样做
for(int i=0,j=len[1]-1; i <len[1];i++,j--)
{
sum[j]=temp[i]+'0';
}
int mySum = 0;
for(int index=0; index <sizeof(sum);index++)
{
mySum += sum[j];
}
printf("%d\n", mySum );
- 如果您想要有效的代码,请重新编写所有代码
#include <stdio.h>
#include <math.h>
const char * number1_c = "1111";
const char * number2_c = "123";
int number1,number2;
int main()
{
number1 = atoi(number1_c);
printf("Sum of x = %d\n", number1);
number2 = atoi(number2_c);
printf("Sum of y = %d\n", number2);
printf("Sum of x+y = %d\n", number1+number2);
return 0;
}
(如果您想了解如何将 char* 转换为 int,google it!)
关于在C中计算除999和1之外的任意两个数字的和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55473479/