0
我想添加兩個大整數作爲輸入字符串由用戶。當兩個輸入字符串的長度不同時,我嘗試用零填充較短的數字,但它不工作。所以如果我輸入456和7,它會在前面加上一些隨機字符。 感謝您的任何建議!在大int中的進位數/填充在C中
void reverse(char *start, char *end)
{
int l ;
int len = strlen(start);
for (l=0;l<len;l++)
end[l] = start[len-l-1];
end[len] = '\0';
}
void add (char *x, char *y, char *sum)
{
char XA[MAXDIGITS];
char YA[MAXDIGITS];
char tempa[MAXDIGITS];
int xa_len, ya_len, xa1, ya1, carry, addition, p, q;
int m = 0;
int n = -1;
xa_len=strlen(x);
ya_len=strlen(y);
reverse(x,XA);
reverse(y,YA);
m = (xa_len > ya_len)?xa_len:ya_len;
for(xa1=0;xa1<=m;xa1++)
tempa[xa1] = '0';
tempa[xa1] = '\0';
if(xa_len>ya_len)
{
for(p=(xa_len-ya_len);p=<m;p++) YA[p]='0';
YA[p] = '\0';
}
if(ya_len>xa_len)
{
for(q=(xa_len-ya_len);q=<m;q++) XA[q]='0';
XA[p] = '\0';
}
for(xa1=0;xa1<=m;xa1++)
{
addition=(XA[xa1]-'0')+(YA[xa1]-'0')+carry;
tempa[xa1] = addition%10+'0';
carry = addition/10;
if (n<xa1) n=xa1;
}
printf("%d", carry);
for(;n>0 && tempa[n]=='0';n--)
tempa[n+1]='\0';
reverse(tempa,sum);
}
這是我如何打印我的輸出
add (x,y,addition);
int length=(strlen(addition));
printf("Sum is ");
for(k=0;k<length;k++) printf("%c",addition[k]);
我可以看到幾個地方,你使用'carry',但是我沒有看到任何你給'carry'的初始值。我建議您編譯時將警告設置爲最大值。這是'-Wall'在微軟上的unix和IIRC'-W4'。 – user3386109
你可能想用它作爲參考。 https://github.com/arunmoezhi/BigNumArithmetic – arunmoezhi