码迷,mamicode.com
首页 > 其他好文 > 详细

大数加法

时间:2015-03-17 21:28:42      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

题目描述

比利经常会碰到超大整数的加法运算,而普通的计算器上无法进行。因此他想你帮他写一个程序来计算结果。

输入

输入数据有多组。首先输入一个整数T,表示有T组输入。

每组输入有两行,每行一个大整数。每个整数最多1000位。没有负数输入。

输出

对于每组输入,输出两个整数的和,单独占一行。

样例输入

2 1 2 112233445566778899 998877665544332211

样例输出

3 1111111111111111110
 
 
以下是代码:
(这种方法很麻烦的说 , 以后写到简单的代码再发过来)
 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 1005
 4 int main ()
 5 {
 6     char ch2[N], ch1[N], a;
 7     int t, i, l1, j, l2, l, flag;
 8     scanf("%d", &t);
 9     while(t--)
10     {
11         flag = 0;
12         char ch[N]={0};
13         scanf(" %s", ch1);    //读入两个大数;
14         scanf(" %s", ch2);
15         l1 = strlen(ch1);    //求长度用来倒序
16         l2 = strlen(ch2);
17         for (i = 0; i<l1/2; i++)
18         {
19             a = ch1[i];
20             ch1[i] = ch1[l1-i-1];  //l1-i-1是因为最后一个数据存在l-1中
21             ch1[l1-i-1] = a;
22         }
23         for (i = 0; i<l2/2; i++)
24         {
25             a = ch2[i];
26             ch2[i] = ch2[l2-i-1];
27             ch2[l2-i-1] = a;
28         }
29         if(ch1[0]+ch2[i]-0-0>9)      //判断第一位是否进位
30             flag = 1;
31         for (i = 0, j=0; i<l1&&j<l2;i++, j++)
32         {
33             ch[i] += ch1[i]-0+ch2[j]-0+0;    //ch读入的是ascll码上的值, 要进行转换;
34             if(ch[i]-9>0)
35             {
36                 ch[i]-=10;
37                 ch[i+1]++;
38             }
39         }
40 
41         if (l1>l2)
42         {
43             for(; i<l1; i++)
44                 ch[i] = ch1[i];
45         }
46         else if(l1<l2)
47         {
48             for(; i<l2; i++)
49                 ch[i] = ch2[i];
50         }
51         l = strlen(ch);
52         for (i = 0; i<l; i++)
53         {
54             a = ch[i];
55             ch[i] = ch[l-i-1];
56             ch[l-i-1] = a;
57         }
58         if(flag == 1)
59         {
60             printf("1");
61             for (i = l-2; i>=0; i--)          //若进位的话要改变长度 首位是1;
62                 printf("%d", ch[i]-0);
63         }
64         else
65             for (i = l-1; i>=0; i--)
66                 printf("%d", ch[i]-0);
67         printf("\n");
68     }
69     return 0;
70 }

 

大数加法

标签:

原文地址:http://www.cnblogs.com/yishilin/p/4345410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!