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

猜你喜欢

转载自blog.csdn.net/weixin_43705195/article/details/84453723
今日推荐