A+B Problem
来源:互联网 发布:大数据 管理平台 编辑:程序博客网 时间:2024/06/05 16:37
A+B Problem
时间限制:1000 ms | 内存限制:65535 KB
描述
acmj最近发现在使用计算器计算高精度的大数加法时很不方便,于是他想着能不能写个程序把这个问题给解决了。
输入
包含多组测试数据
每组数据包含两个正数A,B(可能为小数且位数不大于400)
输出
每组输出数据占一行,输出A+B的结果,结果需要是最简的形式。
样例输入
1.9 0.10.1 0.91.23 2.13 4.089 11 13.072 12.100
样例输出
213.33710025.172
代码及解析:
/*测试数据 A B C 1.9 0.1 2 0.1 1.9 1 1.23 2.1 3.33 3 4.0 7 89 11 100 13.072 12.100 25.172*/#include<iostream>#include<string>using namespace std;int main(){ string A, B; int a, b; cin >> A >> B ; /* 查找A和B中小数点的下标,分别记为a,b.如果没有则返回-1 例如,A="1234.12" 则a=4 B="1234" 则b=-1 */ a = A.find('.'); b = B.find('.'); /* 如果有小数点,去掉 如果是整数则将小数点的下标记为他们的长度 例如,A="1234.12" 则a=4,去掉小数点,A="123412",a大小不变 B="1234" 则b=-1,没有小数点,则b=4 */ if (a != -1) A.erase(a,1); else a = A.length(); if (b != -1) B.erase(b,1); else b = B.length(); /* 根据小数点下标的值补齐整数部分 例如A="1212",B="12" 补齐后,A="1212",B="0012" */ if (a > b) { string C(a - b,'0'); B = C + B; b = a; } else { string C(b - a, '0'); A = C + A; a = b; } /* 根据A,B的长度补齐小数部分 */ if (A.length() > B.length()) B.append( A.length() - B.length(),'0'); else A.append(B.length() - A.length(),'0'); cout << A <<endl << B << endl; /* C用于计算记录结果,k为C的下标,y为进位,i为A和B的下标 flag用于标记结果里面是否小数点,如果有小数点才可以去舍去没用的0 */ char C[401]=""; int i = A.length()-1,k=0,y=0; bool flag = false; while (i >= 0) { C[k] = (y + A[i] + B[i] - 2 * '0') % 10+'0'; y = (y + A[i] + B[i] - 2 * '0') / 10; k++; if (k == A.length() - a ) { C[k] = '.'; k++; flag = true; } i--; } /* 考虑最后还有进位 */ if (y > 0)C[k++] = y + '0'; int j = 0; /* 把多余的0都忽略 */ if(flag) while (C[j] == '0')j++; /* 如果去完0后发现最后一个是小数点,也忽略掉。 */ if (C[j] == '.')j++; for(int i=k-1;i>=j;i--) cout << C[i]; return 0;}
阅读全文
0 0
- problem 1000: A+B problem
- Problem 1000 A+B Problem
- Problem - 1000 A + B Problem
- A + B Problem
- A + B Problem
- 1000 A+B Problem
- 1001 A + B Problem
- A+B Problem
- 1000 A+B Problem
- A + B Problem
- A + B Problem
- 1000 A + B Problem
- 1000 A+B Problem
- A + B Problem
- A + B Problem II
- A + B Problem II
- POJ1001 -- A-B Problem
- A + B problem II
- hdu 4452 Running Rabbits (模拟)
- 时间日期
- cursor属性
- 深入浅出Mybatis技术原理与实战: 读书笔记
- 启动内存溢出的解决
- A+B Problem
- Android通过Intent来调用第三方地图
- 1074. 宇宙无敌加法器(20)
- Windows下Git-preview禁止自动转换文件的换行符
- 【开源云要闻回顾】Docker 拥抱 Kubernetes、GitHub 发布新特性......
- Android图片中的三级缓存
- ubuntu 10.04安装git-doc帮助文档
- 文章标题
- 辽宁省金蝶代理