ZZULIOJ.1151: 大整數加法
阿新 • • 發佈:2018-11-25
1151: 大整數加法
題目描述
比利經常會碰到超大整數的加法運算,而普通的計算器上無法進行。因此他想你幫他寫一個程式來計算結果。
輸入
輸入資料有多組。首先輸入一個整數T,表示有T組輸入。
每組輸入兩個大整數,並用空格隔開。每個整數最多1000位。沒有負數輸入。
輸出
對於每組輸入,輸出兩個整數的和,單獨佔一行。
樣例輸入
2
1 2
112233445566778899 998877665544332211
樣例輸出
3
1111111111111111110
#include<stdio.h>
#include<string.h>
int main()
{
char str1[1000],str2[1000];
int strs1[1000],strs2[1000],strs[1000],b1,b2,i,n=0,t;
scanf("%d",&t);
while(t--)
{
n=0;//用來計算大於10時進一
memset(strs1,0,sizeof(strs1));//初始化
memset(strs2,0,sizeof(strs2));
memset(strs,0,sizeof(strs));
scanf("%s%s",str1,str2);
b1= strlen(str1);//字串長度
b2=strlen(str2);
if(b1>b2)
{
n=b1-b2;
for(i=0;i<b1;i++)
{
strs1[i]=str1[i]-'0';
if(i<b2)//在str2長度範圍內
{
strs2[i+n]=str2[i]-'0';//挪位 相當於補0
}
}
}
else
{
n=b2-b1;
for(i=0;i<b2;i++)
{
strs2[i]=str2[i]-'0';
if(i<b1)
{
strs1[i+n]=str1[i]-'0';
}
}
}
if(b1<b2)//交換,使b1>b2
{
n=b1;
b1=b2;
b2=n;
}
n=0;//歸零
for(i=b1-1;i>=0;i--)
{
strs[i]=strs1[i]+strs2[i]+n;
n=0;
if(i>0)
{
if(strs[i]>=10)
{
strs[i]=strs[i]%10;//求餘
n=1;//進1
}
}
}
for(i=0;i<b1;i++)
printf("%d",strs[i]);
printf("\n");
}
return 0;
}
大數運算方法模板(百度):
#include<stdio.h>
#include<string.h>
int main()
{
char a1[200],a2[200];
int ans1[200],ans2[200],ans[200],b1,b2,i,t=0;
memset(ans1,0,sizeof(ans1));
memset(ans2,0,sizeof(ans2));
memset(ans,0,sizeof(ans));
printf("這是一個大數相加的程式^_^\n");
printf("請輸入第一個大數^_^\n");
scanf("%s",a1);
printf("請輸入第二個大數^_^\n");
scanf("%s",a2);
b1=strlen(a1);
b2=strlen(a2);
if(b1>b2)
{
t=b1-b2;
for(i=0;i<b1;i++)
{
ans1[i]=a1[i]-'0';
if(i<b2)
ans2[i+t]=a2[i]-'0';
}
}
else
{
t=b2-b1;
for(i=0;i<b2;i++)
{
ans2[i]=a2[i]-'0';
if(i<b1)
ans1[i+t]=a1[i]-'0';
}
}
if(b1<b2)
{
t=b1;
b1=b2;
b2=t;
}
t=0;
for(i=b1-1;i>=0;i--)
{
ans[i]=ans1[i]+ans2[i]+t;
t=0;
if(i>0)
{
if(ans[i]>=10)
{
ans[i]=ans[i]%10;
t=1;
}
}
}
for(i=0;i<b1;i++)
{
printf("%d",ans[i]);
}
printf("\n");
return 0;
}