NYOJ103
特别值得注意的一点:在求本位和进位位时的顺序问题。
特别值得注意的一点:在求本位和进位位时的顺序问题。
因为要计算一个大数的位数,所以max的计算影响了他们的顺序。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char A[1005],B[1005];
int N;
int a[1005], b[1005], sum[1005];
void bigmulty_add();//char A[], char B[], int a[], int b[],int sum[]
int main(void)
{
scanf("%d", &N);
for(int i = 1; i <= N; i++)
{
printf("Case %d:\n", i);
memset(A, 0, sizeof(A));//将数组全部清零
memset(B, 0, sizeof(B));
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(sum, 0, sizeof(sum));
scanf("%s", A);
scanf("%s", B);
printf("%s + %s = ", A, B);
bigmulty_add();//A,B,a,b,sum
}
return 0;
}
void bigmulty_add()
{
int len1 = strlen(A);
int len2 = strlen(B);
int i, j;
for(i = len1 - 1, j = 0; i >= 0; i--, j++)//将字符串转换成数组;
a[j] = A[i] - '0';
for(i = len2 - 1, j = 0; i >= 0; i--, j++)
b[j] = B[i] - '0';
int m = len1 > len2 ? len1 : len2;
int max = 0;
for(i = 0; i < m; i++)
{
int temp = a[i] + b[i];
if((temp + sum[i]) / 10 != 0)
{
sum[i+1] += (temp + sum[i]) / 10;//处理进位位
if(i + 1 > max)//用来确定输出位数
max = i + 1;
}
sum[i] = (temp + sum[i]) % 10;//先处理进位位,再处理本位位。这也是刚开始的时候出错的原因!!!
if(i > max)//用来确定输出位数
max = i;
}
for(i = max; i >= 0; i--)//输出结果;
printf("%d", sum[i]);
printf("\n");
}