zoukankan      html  css  js  c++  java
  • Hdu

    题目:

    A + B Problem II

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


    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
      太久没有写高精度,今天写了一下高精度加法,第一次写高精度的时候用了80+行,后来改到<40行,结果现在太久没有写,一写就是70+ = =,当然这次和以前写的有点不一样,以前写的就是纯粹地为了得到那个答案,这次写有一点像是做模板的性质(虽然感觉这模板不可恭维= =),这次写的是写在一个结构体里面,这样是为了在需要高精度的运算的时候可以更加方便的使用(只是自己感觉方便使用= =),而且我把一个大数定义成结构体,结构体里面除了大数加法的函数以外还有大数和大数的长度以及大数由低位到高位的写法,方便以后添加高精度剪发,乘法,除法。
     
    上代码:
     
     1 #include <stdio.h>
     2 #include <string.h>
     3 #define MAX 1050
     4 using namespace std;
     5 
     6 typedef struct N
     7 {
     8     char num[MAX],anum[MAX];
     9     int len;
    10     void anti()
    11     {
    12         int i;
    13         for(i=0;i<len;i++)
    14         {
    15             anum[i]=num[len-i-1];
    16         }
    17     }
    18     void big_plus(N a,N b)
    19     {
    20         int c,i;
    21         c=0;
    22         memset(num,0,sizeof(num));
    23         memset(anum,0,sizeof(anum));
    24         len=0;
    25         for(len=0;len<a.len && len<b.len;len++)
    26         {
    27             int temp=((a.anum[len]-'0')+(b.anum[len]-'0')+c);
    28             c=temp/10;;
    29             anum[len]=temp%10+'0';
    30         }
    31         while(len<a.len)
    32         {
    33             int temp=(a.anum[len]-'0')+c;
    34             c=temp/10;
    35             anum[len++]=temp%10+'0';
    36         }
    37         while(len<b.len)
    38         {
    39             int temp=(b.anum[len]-'0')+c;
    40             c=temp/10;
    41             anum[len++]=temp%10+'0';
    42         }
    43         if(c) anum[len++]='1';
    44         while(len && anum[len-1]=='0') len--;
    45         if(!len){anum[len++]='0';}
    46         for(i=0;i<len;i++)
    47         {
    48             num[i]=anum[len-i-1];
    49         }
    50     }
    51 }N;
    52 
    53 
    54 int main()
    55 {
    56     int i,t;
    57     N n1,n2,n3;
    58     //freopen("data.txt","r",stdin);
    59     scanf("%d",&t);
    60     for(i=1;i<=t;i++)
    61     {
    62         scanf("%s %s",n1.num,n2.num);
    63         n1.len=strlen(n1.num);
    64         n2.len=strlen(n2.num);
    65         n1.anti();
    66         n2.anti();
    67         n3.big_plus(n1,n2);
    68         printf("Case %d:
    ",i);
    69         printf("%s + %s = %s
    ",n1.num,n2.num,n3.num);
    70         if(i!=t) printf("
    ");
    71     }
    72     return 0;
    73 }
    1002
     
  • 相关阅读:
    POJ 1754 Splay
    POJ 3481Double Queue Splay
    前缀表达式求值
    Treap(树堆):随机平衡二叉树实现
    Tarjian算法求强联通分量
    (转)priority_queue的用法
    001Angular2环境准备
    9.富客户端应用程序的线程
    8.信号
    7.线程的优先级
  • 原文地址:https://www.cnblogs.com/sineatos/p/3265585.html
Copyright © 2011-2022 走看看