我是C语言的新手,我正在加两个大整数(它们在char数组中)。 其中len [x]是两个array [x]的长度,进位是检查是否流通,digits [x] [y]表示array [x]中的y + 1整数,temp [i]只是另一个整数数组用于存储数字 我将数组颠倒了,例如1000到0001。我认为它更容易。
我的代码如下:
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
但是如果我在for循环的最后添加这个
printf("%s\n", sum);
所以变成
for (int i=0,j=len[1]-1; i <len[1];i++,j--){
sum[j]=temp[i]+'0';
printf("%s\n", sum);
并具有相同的输入,显示我的预期结果(1000) <<
000 1000
我不知道这种情况如何发生以及如何解决。谢谢。
答案 0 :(得分:0)
首先,您应该对缩进进行操作,并在方括号中进行编码。 它可以帮助您和我们阅读您的代码。在所提供的代码中,缩进不清晰也不正确,如果所提供的代码就是这个缩进,则可能是第一个问题。
使用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 *转换为整数,google it!)