最基本的大数运算----加法, 算法思想很简单,系统的基本整数类型无法存放,这里使用C风格的字符数组进行两个整数的加法模拟。
#include<stdio.h>
#include<string.h>
char a[1001],b[1001];
void sum()
{
char c[1001],d[1001],C='0';
int i,j,a_len,b_len,max_len;
a_len = strlen(a);
b_len = strlen(b);
for(i=0;i<a_len;i++) c[a_len-1-i] = a[i]; //倒置被加数
for(i=0;i<b_len;i++) d[b_len-1-i] = b[i]; //倒置加数
max_len = (a_len>b_len)?a_len:b_len; //取较大数位作为模拟相加的次数
//对位数较小的高位补0,做对位处理
if(max_len != a_len)
for(i=a_len;i<max_len;i++)
c[i] = '0';
else
for(i=b_len;i<max_len;i++)
d[i] = '0';
//加法过程
for(i=0;i<max_len;i++){
a[i] = ((c[i]-'0' + d[i]-'0' + C-'0')%10)+'0';
C = ((c[i]-'0' + d[i]-'0' + C-'0')/10)+'0';
}
//把倒置的数组正置
for(i=0;i<strlen(a);i++) b[strlen(a)-1-i] = a[i];
}
int main()
{
freopen("in","r",stdin);
int n,i;
scanf("%d",&n);
for(i=1;i<=n;i++){
int j,k;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
printf("Case %d:\n",i);
scanf("%s",a);
scanf("%s",b);
printf("%s + %s = ",a,b);
sum();
for(j=0;j<strlen(b);j++){
if(b[j] != '0') break; //从高位向低位寻找到第一个非0数字
}
if(j==strlen(b)){ //如果全是0,则结果应该只输出一个0
printf("0");
}
for(k=j;k<strlen(b);k++) //把余位按次输出
printf("%c",b[k]);
if(i==n) printf("\n"); //输出格式处理
else printf("\n\n");
}
return 0;
}