zoukankan      html  css  js  c++  java
  • hdu 1002: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): 158615    Accepted Submission(s): 30098


    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

    算法很简单,小学老师就教过,只不过用C++语言实现了一遍。

      1 #include <iostream>
      2 
      3 using namespace std;
      4 
      5 int main()
      6 {
      7     char num1[1001],num2[1001],res[1002];
      8     int T,i,len1,len2,count,res_digit,digit_sum,C=0;
      9     //输入实验次数T
     10     cin>>T;
     11     while(T--){     //循环T次
     12         C++;
     13         res[0]='0';
     14         cin>>num1;  //输入第一个数,存储进num1(char [1001])
     15         cin>>num2;  //输入第二个数,存储进num2(char [1001])
     16         //计算第一个数长度(位数),存储进len1
     17         for(len1=0;num1[len1]!='\0';len1++);
     18         //计算第二个数长度(位数),存储进len2
     19         for(len2=0;num2[len2]!='\0';len2++);
     20         //进行相加运算,存储进res(char [1002])中。
     21         //计算结果应该有的位数
     22         if(len1>=len2) res_digit=len1;
     23         else res_digit=len2;
     24         res[res_digit+1]='\0';  //先给结果附上结束符
     25         len1--;
     26         len2--;
     27         //循环相加,len1和len2不断--,直到其中一个减到0
     28         count=0;
     29         while(len1!=-1 && len2!=-1){
     30             if(count==0)
     31                 digit_sum=(num1[len1]-'0')+(num2[len2]-'0');
     32             else
     33                 digit_sum=(num1[len1]-'0')+(num2[len2]-'0')+count;
     34             if(digit_sum>9){    //如果数字之和为2位数
     35                 res[res_digit]=char(digit_sum%10+'0');
     36                 count=1;
     37             }
     38             else{       //如果数字之和为个位数
     39                 res[res_digit]=char(digit_sum+'0');
     40                 count=0;
     41             }
     42             res_digit--;
     43             len1--;
     44             len2--;
     45         }
     46 
     47         if(len1==-1 && len2==-1){
     48             cout<<"Case "<<C<<':'<<endl;
     49             if(count==0){
     50                 cout<<num1<<' '<<'+'<<' '<<num2<<' '<<'='<<' ';
     51                 //输出结果,不带开头的0
     52                 for(i=1;res[i]!='\0';i++)
     53                     cout<<res[i];
     54                 cout<<endl;
     55             }
     56             else{
     57                 cout<<num1<<' '<<'+'<<' '<<num2<<' '<<'='<<' ';
     58                 //输出结果,带第一个
     59                 res[0]='1';
     60                 cout<<res<<endl;
     61             }
     62         }
     63         else if(len1==-1 && len2!=-1){
     64             if(count==0){
     65                 res[res_digit]=num2[len2];
     66                 res_digit--;
     67                 len2--;
     68             }
     69             else{
     70                 res[res_digit]=char(num2[len2]-'0'+count+'0');
     71                 res_digit--;
     72                 len2--;
     73             }
     74             while(res_digit!=0){
     75                 res[res_digit]=num2[len2];
     76                 len2--;
     77                 res_digit--;
     78             }
     79             cout<<"Case "<<C<<':'<<endl;
     80             cout<<num1<<' '<<'+'<<' '<<num2<<' '<<'='<<' ';
     81             for(i=1;res[i]!='\0';i++)
     82                 cout<<res[i];
     83             cout<<endl;
     84         }
     85         else{   //len2==-1 && len1!=-1
     86             if(count==0){
     87                 res[res_digit]=num1[len1];
     88                 res_digit--;
     89                 len1--;
     90             }
     91             else{
     92                 res[res_digit]=char(num1[len1]-'0'+count+'0');
     93                 res_digit--;
     94                 len1--;
     95             }
     96             while(res_digit!=0){
     97                 res[res_digit]=num1[len1];
     98                 len1--;
     99                 res_digit--;
    100             }
    101             cout<<"Case "<<C<<':'<<endl;
    102             cout<<num1<<' '<<'+'<<' '<<num2<<' '<<'='<<' ';
    103             for(i=1;res[i]!='\0';i++)
    104                 cout<<res[i];
    105             cout<<endl;
    106         }
    107         if(T!=0)
    108             cout<<endl;
    109     }
    110     return 0;
    111 
    112     //最后加一个'\0'
    113     //按格式输出res[1002]
    114     //如果res[0]有值,则从0输出
    115     //如果res[0]是0,则从1输出
    116 }

    Freecode : www.cnblogs.com/yym2013

  • 相关阅读:
    iOS 类知乎”分页”效果的实现?
    iOS 图解弹幕功能的实现
    iOS 为何使用runtime方法交换多次后却能按照交换顺序依次执行代码逻辑?
    iOS常用算法之单链表查找倒数第n个节点(图解)
    iOS常用算法之两个有序数组合并, 要求时间复杂度为0(n)
    iOS 常用算法之设计一个算法,验证某字符是否为合法IPV4字符
    iOS .Crash文件分析处理办法 (利用symbolicatecrash工具处理)
    iOS中UIWebview中网页宽度自适应的问题
    iOS开发
    安卓应用加固之反动态调试技术总结
  • 原文地址:https://www.cnblogs.com/yym2013/p/3087589.html
Copyright © 2011-2022 走看看