hdu 1002 A+B

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1002

复习一下大数

模板:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5 #include <assert.h>
 6 #include <ctype.h>
 7 #include <map>
 8 #include <string>
 9 #include <set>
10 #include <bitset>
11 #include <utility>
12 #include <algorithm>
13 #include <vector>
14 #include <stack>
15 #include <queue>
16 #include <iostream>
17 #include <fstream>
18 #include <list>
19 using  namespace  std;
20 
21 const  int MAXL = 1005;
22 struct  BigNum
23 {
24     int  num[MAXL];
25     int  len;
26     BigNum()
27     {
28         memset(num,0,sizeof(num));
29     }
30 };
31 
32 //高精度加法
33 BigNum  Add(BigNum &a, BigNum &b)
34 {
35     BigNum c;
36     int  i, len;
37     len = (a.len > b.len) ? a.len : b.len;
38     memset(c.num, 0, sizeof(c.num));
39     for(i = 0; i < len; i++)
40     {
41         c.num[i] += (a.num[i]+b.num[i]);
42         if(c.num[i] >= 10)
43         {
44             c.num[i+1]++;
45             c.num[i] -= 10;
46         }
47     }
48     if(c.num[len])
49         len++;
50     c.len = len;
51     return  c;
52 }
53 void  print(BigNum &a)   //输出大数
54 {
55     int  i;
56     for(i = a.len-1; i >= 0; i--)
57         printf("%d", a.num[i]);
58     printf("\n");
59 }
60 
61 
62 void Init(BigNum &a, char *s, int &tag)   //将字符串转化为大数
63 {
64     int  i = 0, j = strlen(s);
65     if(s[0] == '-')
66     {
67         j--;
68         i++;
69         tag *= -1;
70     }
71     a.len = j;
72     for(; s[i] != '\0'; i++, j--)
73         a.num[j-1] = s[i]-'0';
74 }
75 
76 int main(void)
77 {
78     //freopen("in.txt","r",stdin);
79     int T;
80     char  s1[MAXL], s2[MAXL];
81     scanf("%d",&T);
82     for(int t=1;t<=T;t++)
83     {
84         BigNum a,b,c;
85         memset(s1,0,sizeof(s1));
86         memset(s2,0,sizeof(s2));
87         scanf("%s %s",s1,s2);
88         int tag=1;
89         Init(a,s1,tag);
90         Init(b,s2,tag);
91         c=Add(a,b);
92         if(t!=1)
93         printf("\n");
94         printf("Case %d:\n",t);
95         printf("%s + %s = ",s1,s2);
96         print(c);
97     }
98     return 0;
99 }

 

普通:

 1 #include<iostream>
 2 #include<string.h>
 3 #include<math.h>
 4 #include<stdlib.h>
 5 #include<stdio.h>
 6 using namespace std;
 7 const int M=1005;
 8 void xsone(int a[],int b[],int lenz)
 9 {
10     for(int i=0;i<lenz;i++)
11     a[i]=a[i]+b[i];
12     int temp=0;
13     for(int i=0;i<lenz+1;i++)
14     {
15         a[i]+=temp;
16         temp=a[i]/10;
17         a[i]%=10;
18     }
19     int i;
20     for(i=lenz+1;i>=0;i--)
21     if(a[i]!=0)
22     break;
23     for(;i>=0;i--)
24     printf("%d",a[i]);
25     printf("\n");
26 }
27 int main()
28 {
29     //freopen("in.txt","r",stdin);
30     int n;
31     scanf("%d",&n);
32     for(int i=1;i<=n;i++)
33     {
34         char sa[M],sb[M];
35         memset(sa,0,sizeof(sa));
36         memset(sb,0,sizeof(sb));
37         scanf("%s %s",sa,sb);
38         int lena = strlen(sa);
39         int lenb = strlen(sb);
40         int lenz = lena>lenb ?lena :lenb;
41 
42         int a[M],b[M];
43         memset(a,0,sizeof(a));
44         memset(b,0,sizeof(b));
45         int j;
46         for(j=0;j<lena;j++)
47         a[lena-1-j]=sa[j]-'0';
48         for(j=0;j<lenb;j++)
49         b[lenb-1-j]=sb[j]-'0';
50         printf("Case %d:\n",i);
51         printf("%s + %s = ",sa,sb);
52         xsone(a,b,lenz);
53         if(i!=n)
54         printf("\n");
55     }
56     return 0;
57 }

 

posted @ 2015-03-18 19:23  煎饼馃子  阅读(107)  评论(0编辑  收藏  举报