您的位置:首页 > 其它

hdu 1753 大明A+B

2017-11-08 14:17 363 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1753
容易出错的事例:

0.1 0.2

1.88 22.22

1 0.01

大概出错的几个点,做久了思维根本出不来了。。。

3次A过。。。马马虎虎吧,代码太长了,优化回来再说吧

1 #include<iostream>
2 #include<stdio.h>
3 #include<math.h>
4 #include<string.h>
5 #include<stdlib.h>
6 using namespace std;
7 const int M=405;
8 int c[M];
9 void xsone(int a[],int b[],int lenz)
10 {
11     for(int i=0;i<lenz;i++)
12     a[i]=a[i]+b[i];
13     int temp=0;
14     for(int i=0;i<lenz+1;i++)
15     {
16         a[i]+=temp;
17         temp=a[i]/10;
18         a[i]%=10;
19     }
20     int i;
21     for(i=lenz;i>=0;i--)
22     if(a[i]!=0)
23     break;
24     if(i<0)
25     printf("0");
26     for(;i>=0;i--)
27     printf("%d",a[i]);
28 }
29 int xstwo(int a[],int b[],int lenz)
30 {
31     memset(c,0,sizeof(c));
32     for(int i=0;i<lenz;i++)
33     c[i]=a[i]+b[i];
34     int temp=0,flag=0;
35     for(int i=lenz-1;i>=0;i--)
36     {
37         c[i]+=temp;
38         if(i==0 && c[i]>=10)
39         flag=1;
40         temp=c[i]/10;
41         c[i]%=10;
42     }
43     return flag;
44 }
45
46
47 int main()
48 {
49     //freopen("in.txt","r",stdin);
50     char sa[M],sb[M];
51     memset(sa,0,sizeof(sa));
52     memset(sb,0,sizeof(sb));
53     while(~scanf("%s %s",sa,sb))
54     {
55         int lena = strlen(sa);
56         for(int i=lena;i<M;i++)
57         sa[i]='0';
58         int lenb = strlen(sb);
59         for(int i=lenb;i<M;i++)
60         sb[i]='0';
61         int lenz = lena>lenb ? lena :lenb;
62         int flag=0,sad=0,sbd=0;
63         for(int i=0;i<lenz;i++)
64         {
65             if(sa[i]=='.')
66             {flag++;sad=i;}
67             if(sb[i]=='.')
68             {flag++;sbd=i;}
69         }
70         //printf("%d\n",flag);
71         if(flag==0)
72         {
73             int a[M],b[M];
74             memset(a,0,sizeof(a));
75             memset(b,0,sizeof(b));
76             for(int i=0;i<lena;i++)
77             a[lena-1-i]=sa[i]-'0';
78             for(int i=0;i<lenb;i++)
79             b[lenb-1-i]=sb[i]-'0';
80             xsone(a,b,lenz);
81             printf("\n");
82         }
83         else if(flag==1)
84         {
85             if(sad)
86             {
87                 int a[M],b[M];
88                 memset(a,0,sizeof(a));
89                 memset(b,0,sizeof(b));
90                 for(int i=0;i<sad;i++)
91                 a[sad-1-i]=sa[i]-'0';
92                 for(int i=0;i<lenb;i++)
93                 b[lenb-1-i]=sb[i]-'0';
94                 lenz = sad>lenb ? sad : lenb;
95                 xsone(a,b,lenz);
96                 for(int i=sad;i<lena;i++)
97                 printf("%c",sa[i]);
98                 printf("\n");
99             }
100             if(sbd)
101             {
102                 int a[M],b[M];
103                 memset(a,0,sizeof(a));
104                 memset(b,0,sizeof(b));
105                 for(int i=0;i<lena;i++)
106                 a[lena-1-i]=sa[i]-'0';
107                 for(int i=0;i<sbd;i++)
108                 b[sbd-1-i]=sb[i]-'0';
109                 lenz = lena>sbd ? lena : sbd;
110                 xsone(a,b,lenz);
111                 for(int i=sbd;i<lenb;i++)
112                 printf("%c",sb[i]);
113                 printf("\n");
114             }
115         }
116         else
117         {
118             int a[M],b[M];
119             memset(a,0,sizeof(a));
120             memset(b,0,sizeof(b));
121             //printf("%d\n",lenz);
122             int t=0;
123             for(int i=sad+1;i<lena;i++)
124             a[t++]=sa[i]-'0';
125             t=0;
126             for(int i=sbd+1;i<lenb;i++)
127             b[t++]=sb[i]-'0';
128             int salend=lena-sad-1;
129             int sblend=lenb-sbd-1;
130             lenz = salend>sblend ? salend : sblend;
131             //printf("%d",lenz);
132             int dright=0;
133             dright = xstwo(a,b,lenz);
134             //printf("%d\n",dright);
135 //            int i;
136             int lenz2 = lenz;
137 //            for(i=0;i<lenz;i++)
138 //            printf("%d",c[i]);
139 //            printf("\n");
140
141             memset(a,0,sizeof(a));
142             memset(b,0,sizeof(b));
143             for(int i=0;i<sad;i++)
144             a[sad-1-i]=sa[i]-'0';
145
146             if(dright == 1)//进位
147             a[0]++;
148             for(int i=0;i<sbd;i++)
149             b[sbd-1-i]=sb[i]-'0';
150             lenz = sad>sbd ? sad :sbd;
151             xsone(a,b,lenz);
152             int i,h=0,j;
153             for(i=lenz2;i>=0;i--)
154             if(c[i]!=0)
155             break;
156             h=i;
157             if(h>=0)
158             {
159                 printf(".");
160                 for(j=0;j<=h;j++)
161                 printf("%d",c[j]);
162             }
163             printf("\n");
164         }
165     }
166     return 0;
167 }


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: