大数加法

题目描述

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

输入

输入数据有多组。首先输入一个整数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 }

 

你可能感兴趣的:(大数加法)