大数的a+b

主页论坛题库名次状态统计

题目 B: a+b

时间限制: 1 Sec   内存限制: 128 MB
提交: 31   解决: 7
[ 提交][ 状态][ 论坛]

题目描述

a+b

输入

一个 m 代表多少组数据

每组两个数a b,空格隔开,每个数小于1000位

输出

a+b的和。。并换行。

样例输入

5
123456 123456
654321 654321
987654321123456789 987654321123456789
1111111111111111111111111111111111111122222222222222222222222222222223333333333333333333339999999999999999999999999999999998888888888888888888888887777777777777777777777777777777
111111111 111111111111

样例输出

246912
1308642
1975308642246913578
121111111111111111111111111111111110001111111111111111111110000000000111111111111111111110
111222222222

提示;注意数是比较大的,不能用寻常的思路去做,字符串容纳的位数比较大,可以尝试字符串来做这道题。

#include<stdio.h>
#include<string.h>
int main()
{
     int i,n,q,w,t,j;
     char a[1000],b[1000];//用字符串a b来记录输进的数。
     scanf ( "%d" ,&n);
     while (n--)
     {
         int c[1000]={0},d[1000]={0},e[1000]={0};//因为字符串加减麻烦,因此用数组来讲字符串反过记录,
       scanf ( "%s %s" ,a,b);
         q= strlen (a);//测试字符串的长度。
         w= strlen (b);
         if (q>w)
             t=q;
         else
             t=w;//找出字符串长度最长的位数。
         for (i=0;i<q;i++)
             c[q-i-1]=a[i]- '0' ;
         for (i=0;i<w;i++)
             d[w-1-i]=b[i]- '0' ;//字符转化成数字。
          for (i=0;i<t;i++)
         {
             e[i]=c[i]+d[i]+e[i];//将数加起来。
             if (e[i]>=10)
             {e[i]=e[i]-10;
             e[i+1]=1;}//进位。
         }q=0;
         for (i=t;i>=0;i--)
         {
             if (e[i]!=0)//判断是否数的最高位是否为0;
             {
                 q++;
                 for (j=i;j>=0;j--)
                 printf ( "%d" ,e[j]);
                 break ;
             }
 
         }
         if (q==0)
             printf ( "0" );//排除0000+00000;
             printf ( "\n" );
 
     }
    return 0;
}
 
/**************************************************************
     Problem: 1521
     User: 141210145
     Language: C
     Result: 正确
     Time:0 ms
     Memory:968 kb
****************************************************************/

[ 提交][ 状态][ 论坛]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值