大明A+B hdu 1753
这道题纠结了我一个下午,我能想到的变态数据都过了,还是wrong answer.............悲剧啊。。。。。求BT测试数据。。。。。。。。。。。。\
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 int main( )
5 {
6 char ch1[510],ch2[510];
7 while(scanf("%s%s",ch1,ch2)!=EOF)
8 {
9
10 int len1,len2,a[510],b[510],c[510],d[510],i,j,k=0,m=0,n=0,
11 flag=1,p=0,q=0,e[510],f[510],tt=0,flag2=0;
12 memset(a,0,sizeof(a));
13 memset(b,0,sizeof(b));
14 memset(c,0,sizeof(c));
15 memset(d,0,sizeof(d));
16 memset(e,0,sizeof(e));
17 memset(f,0,sizeof(f));
18 len1=strlen(ch1);
19 len2=strlen(ch2);
20 /*处理字符串,提出整数部分,和小数部分,
21 分别保存在四个数组里面*/
22 for(i=0;i<len1;i++)
23 {
24 if(ch1[i]!='.'&&flag)
25 a[p++]=ch1[i]-48;
26 else
27 {
28 if(flag) i++;
29 if(i<len1)
30 {
31 b[m++]=ch1[i]-48;
32 flag=0;
33 }
34 }
35 }
36 flag=1;
37 for(i=0;i<len2;i++)
38 {
39 if(ch2[i]!='.'&&flag)
40 c[q++]=ch2[i]-48;
41 else
42 {
43 if(flag) i++;
44 if(i<len2)
45 {
46 d[n++]=ch2[i]-48;
47 flag=0;
48 }
49 }
50 }
51 i=0;
52 flag2=0;
53 len1=p>q?p:q;
54 p--,q--;
55 /*
56 算A+B的整数部分
57 */
58 for(;p>=0&&q>=0;)
59 e[i++]=a[p--]+c[q--];
60 if(p==-1)
61 {
62 for(;q>=0;)
63 e[i++]=c[q--];
64 }
65 else
66 {
67 for(;p>=0;)
68 e[i++]=a[p--];
69 }
70
71 /*大于9进位*/
72 for(k=0;k<i;k++)
73 if(e[k]>9)
74 {
75 e[k]-=10;
76 e[k+1]++;
77 }
78 /*判断最高位是位有进位,有进位就标志flag2为1*/
79 if(e[i]!=0)
80 flag2=1;
81 /*处理小数部分,相加*/
82 j=0;
83 m--,n--;
84 len1=m>n?m:n;
85 for(k=len1;k>=0;k--)
86 f[k]=b[k]+d[k];
87 /*小数部分进位*/
88 for(k=len1;k>=1;k--)
89 if(f[k]>9)
90 f[k-1]++,f[k]-=10;
91 /*处理小数点位一位*/
92 if(f[0]>9)
93 e[0]++,f[0]-=10;
94 /*处理个数位进位位,而可能导致整数部分其它进位的情况*/
95 for(j=0;j<=i;j++)
96 if(e[j]>9)
97 e[j]-=10,e[j+1]++;
98 /*处理整数部分前面的0*/
99 while(e[i]==0&&i>0)
100 i--,tt=1;
101 // printf("%d ",i);
102 if(tt)
103 i++;
104 /*输出整数部分*/
105 if(flag2) printf("%d",e[i]);
106 for(k=i-1;k>=0;k--)
107 printf("%d",e[k]);
108 /*处理小数部分后面0位置*/
109 while(f[len1]==0&&len1>=0)
110 len1--;
111 /*如果没有小数位则不输出小数点*/
112 if(len1!=-1)
113 printf(".");
114 i=0;
115 /*输出小数部分*/
116 for(;i<=len1;i++)
117 printf("%d",f[i]);
118 printf("\n");
119 }
120 return 0;
121 }
122
123
124
125
posted on 2011-04-25 18:58 more think, more gains 阅读(226) 评论(0) 编辑 收藏 举报