zoukankan      html  css  js  c++  java
  • 大数加法

    题目描述

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

    输入

    输入数据有多组。首先输入一个整数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("
    ");
    68     }
    69     return 0;
    70 }
  • 相关阅读:
    重置所有视图
    利用ASP发送和接收XML数据的处理方法
    win2003上传、下载大小限制的问题
    转 C#中文转换成累加拼音声母,直接使用
    用LogParser对IIS 日志进行分析
    应用于服务器的软件防火墙介绍
    ASP.NET Ajax资料收集贴
    BlackICE简单应用
    ajax 跨域访问解决方案
    IBM T61 上蓝牙软件BlueSoleil的使用方法
  • 原文地址:https://www.cnblogs.com/yishilin/p/4345410.html
Copyright © 2011-2022 走看看