• 杭电1002 A+Bproblem。。。交了七遍,最后发现原来有五遍是因为没删测试输出= =、、


    杭电1002 A+Bproblem。。。交了七遍,最后发现原来有五遍是因为没删测试输出= =、、
    2012-02-19 09:34:23

    A + B Problem II

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

    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
     1 #include<stdio.h> 
    2 #include<string.h>
    3 int main()
    4 {
    5 int n,i,l1,l2,max,a,j,t;
    6 char s1[1001],s2[1001],s3[1001];
    7 scanf("%d",&n);
    8 for(i = 0;i < n;i++)
    9 {
    10 scanf("%s%s",s1,s2);
    11
    12 l1 = strlen(s1);
    13 l2 = strlen(s2);
    14 if(l1>l2)
    15 max = l1;
    16 else
    17 max = l2;
    18
    19 t=max;
    20 memset(s3,'\0',1001);
    21 memset(s3,'0',max+1);
    22 l1 = l1-1;
    23 l2 = l2-1;
    24 max = max;
    25 s3[0]='0';
    26 while(l1>=0 && l2>=0)
    27 {
    28 a = s1[l1--]-'0'+s2[l2--]-'0'+s3[max]-'0';//问题可以直接简化为小学的算术题,从后往前算
    29 s3[max--] ='0'+a%10;
    30 if(a>=10)
    31 s3[max]+=1;//大于十的时候记得向前加一,因为以上三个数永远不会大于等于20.。。。
    32
    33 }
    34 while(l1>=0)
    35 {
    36 a = s3[max]-'0'+s1[l1--]-'0';
    37 s3[max--]='0'+a%10;
    38 if(a>=10)
    39 s3[max]+=1;
    40 }
    41 while(l2>=0)
    42 {
    43 a = s3[max]-'0'+s2[l2--]-'0';
    44 s3[max--]='0'+a%10;
    45 if(a>=10)
    46 s3[max]+=1;
    47 }
    48
    49 printf("Case %d:\n",i+1);
    50 printf("%s + %s = ",s1,s2);
    51
    52 if(s3[0] > '0')
    53 printf("%c",s3[0]);//这一步很重要,假设是1和9想加,会上升一位
    54 for(j = 1;j < t; j++)
    55 printf( "%c", s3[j]);
    56 printf( "%c\n", s3[j]);
    57 if(i<n-1)
    58 printf("\n");
    59 }
    60 return 0;
    61 }
  • 相关阅读:
    转 : jmeter分布式测试的坑
    Node.js 事件循环
    ubuntu 16.04 安装nodejs
    java中native的用法
    分布式与集群的概念区别
    IntegerToBinaryString
    Mysql InnoDB事务
    浅析Mysql InnoDB存储引擎事务原理
    Mysql数据库事务的隔离级别和锁的实现原理分析
    MySQL中MyISAM和InnoDB的区别
  • 原文地址:https://www.cnblogs.com/0803yijia/p/2364064.html
Copyright © 2020-2023  润新知