我试图用户将两个大整数输入作为字符串输入。当两个输入字符串的长度不同时,我尝试用零填充较短的数字,但它没有用完。因此,如果我输入456和7,则它会在前面加上一些随机字符。 谢谢你的任何建议!
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]);
答案 0 :(得分:0)
当然carry
必须初始化。
您的代码出现问题。对reverse()
的调用可以通过简单地在相反方向上运行循环来完成。此外,看来最后的执行不会影响结果。建议的代码如下:
#include <malloc.h>
#include <stdio.h>
#include <string.h>
char *str_add(const char *a, const char *b) {
size_t alen = a == NULL ? 0 : strlen(a);
size_t blen = b == NULL ? 0 : strlen(b);
if (blen > alen) {
const char *t = a; a = b; b = t;
size_t tlen = alen; alen = blen; blen = tlen;
}
size_t clen = blen + 1;
int carry = 0;
char *c = malloc(clen + 1); // 1 extra
const char *ap = &a[alen];
const char *bp = &b[blen];
char *cp = &c[clen];
*cp = '\0';
while (bp > b) {
int sum = *(--ap) - '0' + *(--bp) - '0' + carry;
carry = 0;
if (sum >= 10) {
sum -= 10;
carry++;
}
*(--cp) = sum + '0';
}
while (ap > a) {
int sum = *(--ap) - '0' + carry;
carry = 0;
if (sum >= 10) {
sum -= 10;
carry++;
}
*(--cp) = sum + '0';
}
if (carry) {
memmove(&cp[1], &cp[0], clen);
*cp = carry + '0';
}
return cp;
}
void test_add(const char *a, const char *b) {
char *sum = str_add(a,b);
printf("%s + %s = %s\n", a, b, sum);
free(sum);
}