hdoj-1753-大明A+B(大数)
2015-07-29 10:13
302 查看
大明A+B
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10109 Accepted Submission(s): 3630
[align=left]Problem Description[/align]
话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫“大明”。
这时他已经不是那个只会做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
解题思路:
这是用大数来解决小数加减。
将给定的数据分为整数和小数部分,整数逆着存到一个数组(从0开始),小数正着存到一个数组(从1开始)。
先进行小数运算,逆着运算;然后将小数[0]加到整数[0],然后整数运算,正着运算。
然后清除整数数组后面多余的0,逆着输出,清除小数后面的0,并判断是否到0,否则输出小数点,且小数数组正着输出。
代码:
#include<stdio.h> #include<string.h> char a[410],b[410]; int za[410],zb[410]; int xa[410],xb[410]; int ze[410],xe[410]; int main() { int lena,lenb; int poa,pob; int now; int i,j,k; int lxa,lxb; while(scanf("%s%s",a,b)!=EOF) { lena=strlen(a); lenb=strlen(b); for(i=0;i<lena&&a[i]!='.';i++) { } poa=i; for(i=0;i<lenb&&b[i]!='.';i++) { } pob=i; //找小数点 memset(za,0,sizeof(za)); memset(zb,0,sizeof(zb)); memset(xa,0,sizeof(xa)); memset(xb,0,sizeof(xb)); //清空临时存储数组 for(i=poa-1,j=0;i>=0;i--,j++) za[j]=a[i]-'0'; for(i=pob-1,j=0;i>=0;i--,j++) zb[j]=b[i]-'0'; //整数逆着存储 for(i=poa+1,j=1;i<lena;i++,j++) xa[j]=a[i]-'0'; lxa=j-1; for(i=pob+1,j=1;i<lenb;i++,j++) xb[j]=b[i]-'0';//注意j从1开始 lxb=j-1; //小数正着存储 if(lxa<lxb) { lxa=lxb; }//找长的 memset(xe,0,sizeof(xe)); for(i=lxa;i>=0;i--) { xe[i]+=xa[i]+xb[i]; if(xe[i]>9) { xe[i-1]+=xe[i]/10; xe[i]%=10; } } //小数逆着运算 if(poa<pob) { poa=pob; } memset(ze,0,sizeof(ze)); if(xe[0]!=0) ze[0]+=xe[0];//小数[0]加到整数[0] for(i=0;i<=poa;i++) { ze[i]+=za[i]+zb[i]; if(ze[i]>9) { ze[i+1]+=ze[i]/10; ze[i]%=10; } } //整数正着运算 for(i=poa;i>=0&&ze[i]==0;i--) { } for(;i>=0;i--) printf("%d",ze[i]); for(i=lxa;i>0;i--) if(xe[i]!=0) break; if(i!=0) { j=i; printf("."); for(j=1;j<=i;j++) printf("%d",xe[j]); } printf("\n"); } return 0; }
相关文章推荐
- 程序员接私单需要注意的几大问题
- 畅通工程续
- CListBox
- 7月第4周全球域名商(国际域名)新增注册量TOP15
- 嗯,严格意义上来说 Windows 10 已经正式发布一个小时了
- 棋盘型动态规划
- Metasploit数据库问题汇总
- JS按回车键实现登录的方法
- Android SharedPreferences Api
- 嫦娥
- spark中saveAsTextFile如何最终生成一个文件
- Easyui的validatebox验证方法自定义扩展
- Python:渗透测试开源项目
- 枚举+剪枝 codeforces303C Minimum Modular
- 插入排序(直接 和 希尔)
- Android学习之联系人PinnedHeaderListView(通讯录)
- 设置tableviewcell的分割线从头开始
- HDOJ Saving Beans 3037【Lucas定理】
- hibernate里createSQLQuery的addEntity()和setResultTransformer()方法
- JavaScript 数组的indexOf()、remove()、splice() , pop()方法