HDU 1753 小数的大数相加
2013-08-02 11:11
316 查看
大明A+B
[align=left] [/align]
Problem Description
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。这时他已经不是那个只会做100以内加法的那个“小明”了,现在他甚至会任意长度的正小数的加法。
现在,给你两个正的小数A和B,你的任务是代表大明计算出A+B的值。
[align=left]Input[/align]
本题目包含多组测试数据,请处理到文件结束。
每一组测试数据在一行里面包含两个长度不大于400的正小数A和B。
[align=left]Output[/align]
请在一行里面输出输出A+B的值,请输出最简形式。详细要求请见Sample Output。
[align=left]Sample Input[/align]
1.1 2.9 1.1111111111 2.3444323343 1 1.1
[align=left]Sample Output[/align]
4 3.4555434454 2.1
小数的大数相加、、本来写的有点乱弄了、
然后这改改那改改、最后还是wa—整数进位进错了,给你弄反了...
#include <iostream> using namespace std; int main() { char s1[1111],s2[1111]; int len1,len2; int r1,r2; int i,j; while(scanf("%s%s",&s1,&s2)!=EOF) { len1=strlen(s1),len2=strlen(s2); char zs1[1111],zs2[1111],xs1[1111],xs2[1111]; //将两个数的小数、整数都分离 for(i=0;i<len1;i++) { if(s1[i]=='.') { strcpy(xs1,&s1[i+1]); s1[i]='\0'; strcpy(zs1,s1); break; } } if(i==len1) { strcpy(zs1,s1); strcpy(xs1,""); } for(i=0;i<len2;i++) { if(s2[i]=='.') { strcpy(xs2,&s2[i+1]); s2[i]='\0'; strcpy(zs2,s2); break; } } if(i==len2) { strcpy(zs2,s2); strcpy(xs2,""); } int n1=strlen(zs1),n2=strlen(zs2); int n=n1>n2?n1:n2; int k=0; int A[1111],B[1111];//A存储整数部分,B存储小数部分 memset(A,0,sizeof(A)); memset(B,0,sizeof(B)); //整数部分相加 for(i=0;i<n;i++) { n1--;n2--; if(n1>=0&&n2>=0) A[k++]=zs1[n1]+zs2[n2]-2*'0'; else if(n1>=0&&n2<0) A[k++]=zs1[n1]-'0'; else if(n1<0&&n2>=0) A[k++]=zs2[n2]-'0'; } n1=strlen(xs1),n2=strlen(xs2); n=n1>n2?n1:n2; int g=0; //小数部分相加 for(i=0;i<n;i++) { if(g<n1&&g<n2) B[g++]=xs1[g]+xs2[g]-2*'0'; else if(n1>g&&n2<=g) B[g++]=xs1[g]-'0'; else if(n1<=g&&n2>g) B[g++]=xs2[g]-'0'; } //小数进位 for(i=g-1;i>0;i--) if(B[i]>9) B[i-1]++,B[i]%=10; if(B[0]>9)A[0]++,B[0]%=10; for(i=0;i<k-1;i++) if(A[i]>9) A[i+1]++,A[i]%=10; //去除小数多余的后缀0 for(i=g-1;i>=0;i--) if(B[i]) break; if(i==0)g=0; g=i+1; //去除整数部分多余的前缀0 for(i=k-1;i>0;i--) if(A[i])break; k=i; //输出整数部分 for(i=k;i>=0;i--)printf("%d",A[i]); //小数部分都为0的话 则不用输出 if(g>0) { printf("."); for(i=0;i<g;i++)printf("%d",B[i]); } printf("\n"); } return 0; }
相关文章推荐
- HDU 1753 大明A+B(大数相加)(string::npos)
- HDU-1753 大明A+B【大数相加】
- hdu 1753 高精度小数相加
- hdu 1753 大明A+B (正小数相加)
- hdu1753 大明A+B (java大数练习第二弹 高精度小数)
- Hdu 1753 大明A+B <高精度小数相加>
- hdu 1753 大数相加(高精度)
- hdu 1753 java 小数相加
- hdu 1753 大明A+B 长小数相加
- HDU1753—大明A+B(大正小数相加)
- HDU-1753 大明A+B【大数相加】
- hdu 1753 大明A+B (java大数)
- hdu 1002 大数相加
- hdu 1002 A + B Problem II 大数相加
- HDU 1047 多个大数相加 Integer Inquiry
- 杭电ACM 1753 大明A+B(大数:正小数加法)
- hdu1250(Java)大数相加的问题
- hdu 4523 威威猫系列故事——过生日(简单大数相加比较)
- HDU 1047.Integer Inquiry【多个大数相加】【高精度】【8月25】
- hdu 1002 大数相加