zoukankan      html  css  js  c++  java
  • hdu1002 A + B Problem II

    A + B Problem II

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 121378    Accepted Submission(s): 23159


    Problem Description
    I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
     


     

    Input
    The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000.
     


     

    Output
    For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases.
     


     

    Sample Input
    2 1 2 112233445566778899 998877665544332211
     


     

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


     

    Author
    Ignatius.L
     


     

    这道题的题意很明显就是实现大数相加,所以是高精度类题目。

    不过刚开始做这类题目还是要小心一些东西,例如开始输入的 时候小的小标里存放的却是大的数位,所以要反向赋值给两个整型数组(方便后面的处理),还有要注意最好不要用长度长的数字作为循环的控制条件,因为有时我们无法知道进位会进到第几位(即使知道处理起来也是比较麻烦的 ),所以是需要用最大的数字作为循环控制变量。其他的就是注意此题的输出要求比较高,要小心一些空格和回车。

    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    using namespace std;
    char str1[1010];
    char str2[1010];
    int a[1010];
    int b[1010];
    int c[1010];
    int main()
    {
        int t;
        scanf("%d",&t);
        for(int i=1;i<=t;i++)
        {
           memset(a,0,sizeof(a));
           memset(b,0,sizeof(b));
           memset(c,0,sizeof(c));
           scanf("%s",str1);
           scanf("%s",str2);
           int len1,len2;
           len1=strlen(str1);
           len2=strlen(str2);
           //输入的数字最小下标的数位最大,所以要反向赋值到a[],b[] 
           int cx=0;
           for(int j=len1-1;j>=0;j--)
           a[cx++]=str1[j]-48;
           cx=0;
           for(int j=len2-1;j>=0;j--)
           b[cx++]=str2[j]-48;
           int plus=0;
           for(int j=0;j<1002;j++)
           {
                  int s;
                  s=a[j]+b[j]+plus;
                  c[j]=s%10;
                  plus=s/10;
              
           }
           printf("Case %d:\n",i);
           printf("%s + %s = ",str1,str2);
           int j;
           for(j=1001;j>=0;j--) if(c[j]) break;
           int rec;
           rec=j;
           if(rec<0){printf("0\n");printf("\n");continue;}//以防输出的结果是0 
           for(j=rec;j>=0;j--)
           printf("%d",c[j]);
           printf("\n");
           if(i!=t)
           printf("\n");
        }
        system("pause");
        return 0;
    }
    


     

  • 相关阅读:
    Android 之流媒体播放器,广播侧下方这么简单。
    POJ 1146:ID Codes
    NYOJ 47 河问题
    浏览器 HTTP 协议缓存机制详解--网络缓存决策机制流程图
    写给后端程序员的HTTP缓存原理介绍--怎样决定一个资源的Cache-Control策略呢
    浅谈Web缓存-缓存的实现过程详解
    国内各大互联网公司相关技术博客3.0版 (集合腾讯、阿里、百度、搜狐、新浪、网易、360等共29个)
    知名技术团队博客
    【Web缓存机制系列】2 – Web浏览器的缓存机制-(新鲜度 校验值)
    学习是一件艰苦的事情
  • 原文地址:https://www.cnblogs.com/gremount/p/5768020.html
Copyright © 2011-2022 走看看