标签:
题目: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 }
标签:
原文地址:http://www.cnblogs.com/xuesen1995/p/4350569.html