hdu 1753 大明A+B

题目: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 }

 

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