• 分析A + B Problem II


    题目

     

    我有一个很简单的问题要问你。给定两个整数A和B,你的工作是计算A + B的和。

    输入

    输入的第一行包含整数T(1 < = T < = 20),这意味着测试用例的数量。然后T行遵循,每一行包含两个正整数,A和b。注意整数是非常大的,这意味着你不应该用32位整数来处理它们。您可以假设每个整数的长度不会超过1000。

    输出

    对于每个测试用例,您应该输出两行。第一行是“Case #:”,#表示测试用例的数量。第二行是“A + B = Sum”的方程,和表示A + B的结果,这里有一些空格为等式。在两个测试用例之间输出一个空行

    2
    1 2
    112233445566778899 998877665544332211

    Sample Output

    Case 1:
    1 + 2 = 3
    
    Case 2:
    112233445566778899 + 998877665544332211 = 1111111111111111110

    解法一:
    主要思路先用两个字符数组读取大整数,在将其转换数字分别储存到整型数组中进行运算;
     1 #include<iostream>
     2 #include<string.h>
     3 using namespace std;
     4 
     5 #define MAX 1010
     6 int add1[MAX], add2[MAX], res[MAX];                          
     7 char tmp1[MAX], tmp2[MAX];
     8 int main()
     9 {
    10     int N, i, j, len, len1, len2, tmp, k;
    11         scanf("%d",&N);
    12         getchar();
    13         for(j=0;j<N;j++)
    14         {
    15             memset(add1,0,sizeof(add1));  //开始没有对数组的每个成员初始化为0,使的在进行进位操作时比较麻烦
    16             memset(add2,0,sizeof(add2));  //因为没有在每次循环开始时初始化,导致运算结果出错
    17             memset(res,0,sizeof(res));
    18             memset(tmp1,0,sizeof(tmp1));
    19             memset(tmp2,0,sizeof(tmp2));
    20             scanf("%s %s",tmp1,tmp2);
    21             len1 = strlen(tmp1);
    22             len2 = strlen(tmp2);
    23             for(i=len1-1,k=0;i>=0;i--)
    24                 add1[k++] = tmp1[i] - '0';
    25
    26             for(i=len2-1,k=0;i>=0;i--)
    27                 add2[k++] = tmp2[i] - '0';
    28             tmp = 0;
    29             if(len1 >= len2)
    30             {
    31                 for(i=0;i<=len1;i++)
    32                 {
    33                     res[i] = (add1[i] + add2[i] +tmp)%10;
    34                     tmp = (add1[i] + add2[i] +tmp)/10;
    35                 }
    36             }
    37             else if(len1 < len2)
    38             {
    39                 for(i=0;i<=len2;i++)
    40                 {
    41                     res[i] = (add1[i] + add2[i] +tmp)%10;
    42                     tmp = (add1[i] + add2[i] +tmp)/10;
    43                 }
    44             }
    45             if(len1 >= len2) len = len1;
    46             else len = len2;
    47             printf("Case %d:
    %s + %s = ",j+1, tmp1 , tmp2);
    48             if(res[len]!=0) printf("%d",res[len]);    
    49             for(i=len-1;i>=0;i--)
    50                     printf("%d",res[i]);
    51         
    52             printf("
    ");
    53             if(j!=N-1) printf("
    ");
    54         }
    55     return 0;
    56 }

    解法二:

    这个方法的没有上面那种清楚,但很有趣,这个方法利用了字符的ACIII的大小关系进行运算

     1 #include <iostream>
     2 
     3 using namespace std;
     4 #include<string.h>
     5 #include<stdio.h>
     6 void Add(char a[],char b[],char d[])
     7 {
     8     char c[1010];
     9     int lena=strlen(a),lenb=strlen(b);
    10     int i,j,len;
    11     len=lena>lenb?lena:lenb;
    12     len++;
    13     c[0]='';
    14     for(i=1;i<=len;i++)c[i]='0';
    15     for(i=1;i<=lena;i++)c[i]+=a[lena-i]-48;    //进行相加,暂时不继续进位计算             
    16     for(i=1;i<=lenb;i++)c[i]+=b[lenb-i]-48;
    17     for(i=0;i<=len;i++)
    18         if(c[i]>57)                                    
    19     {
    20             c[i]-=10;
    21             c[i+1]++;
    22         }
    23 
    24     for(i=len;i>1;i--)
    25         if(c[i]==48)len--;
    26         else break;
    27      for(i=0;i<=len;i++)
    28         d[i]=c[len-i];
    29 }
    30 int main()
    31 {
    32     int t,jishu=0;
    33     char a[1010],b[1010],d[1010];
    34     cin>>t;
    35     for(int i=0;i<t;i++)
    36     {
    37         jishu++;
    38 
    39         cin>>a>>b;
    40         Add(a,b,d);
    41         cout<<"Case "<<jishu<<":"<<endl;
    42         cout<<a<<" + "<<b<<" = "<<d<<endl;
    43         if(i!=t-1)
    44             cout<<endl;
    45     }
    46     return 0;
    47 }

     

  • 相关阅读:
    Excel Sheet Column Number
    HappyNum
    isIsomorphic
    Contains DuplicateII
    iis7 设置http 自动跳转到https
    php 安装redis
    java 打包 war包
    NPOI 操作excel之 将图片插入到指定位置;
    nopi 简洁笔记
    vs11 微软下载地址
  • 原文地址:https://www.cnblogs.com/a2985812043/p/7192764.html
Copyright © 2020-2023  润新知