1. 程式人生 > >ZZULIOJ.1151: 大整數加法

ZZULIOJ.1151: 大整數加法

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;
}