问题描述
计算两个实数相加的结果。
输入的实数满足如下要求: (1) 小数点前的整数部分最多100位,(2) 小数点后的小数部分最多100位.

输入格式
两行字符串,每行都是一个合法的实数。合法的意思是指:  整数部分的值如果大于零,则最高位数字必定大于零. 如果整数部分的值为零,则整数部分只有一个零. 小数部分尾部可以有任意多的零. 可以没有小数部分,  此时也没有小数点. 如果有小数点, 则至少需要有一位小数部分, 且允许是零.
输出格式
相加结果。注意: 小数部分末尾如果有连续的0, 则它们都是有效数字,  不能舍去. 如果是两个整数相加, 则结果仍为整数而没有小数部分.
样例输入
样例一:
0.0000000000000000000000000000000000000111111111000000000000000000
100000000000000000000000000000000000000000000000000000.0
样例二:
3
4
样例三:
3.9
2
样例四:
1.001
8.99999999999999999999999

样例输出
样例一:
100000000000000000000000000000000000000000000000000000.0000000000000000000000000000000000000111111111000000000000000000
样例二:
7
样例三:
5.9
样例四:
10.00099999999999999999999

分析:1.高精度模拟竖式加法,整数部分相加,小数部分相加
2.整数部分,位数不够,前面补0;小数部分位数不够,后面补0
3.小数部分如果有进位,要截下来加到整数上去~

#include <iostream>
#include <string>
using namespace std;
string add1(string s1, string s2) {int len1 = s1.length(), len2 = s2.length();if (len1 < len2) {string t(len2 - len1, '0');s1 = t + s1;} else if (len2 < len1) {string t(len1 - len2, '0');s2 = t + s2;}string ans = s1;int car = 0;for (int i = s1.length() - 1; i >= 0; i--) {ans[i] = (s1[i] - '0' + s2[i] - '0' + car) % 10 + '0';car = (s1[i] - '0' + s2[i] - '0' + car) / 10;}if (car) ans = (char) (car + '0') + ans;return ans;
}
string add2(string s1, string s2) {int len1 = s1.length(), len2 = s2.length();if (len1 < len2) {string t(len2 - len1, '0');s1 = s1 + t;} else if (len2 < len1) {string t(len1 - len2, '0');s2 = s2 + t;}string ans = s1;int car = 0;for (int i = s1.length() - 1; i >= 0; i--) {ans[i] = (s1[i] - '0' + s2[i] - '0' + car) % 10 + '0';car = (s1[i] - '0' + s2[i] - '0' + car) / 10;}if (car) ans = (char) (car + '0') + ans;return ans;
}
int main() {string a, b;while (cin >> a >> b) {string a1, a2, b1, b2;int i, j;for (i = 0; i < a.length() && a[i] != '.'; i++);for (j = 0; j < b.length() && b[j] != '.'; j++);a1 = a.substr(0, i);b1 = b.substr(0, j);if (i == a.length()) a2 = "";else a2 = a.substr(i + 1, a.length() - i - 1);if (j == b.length())b2 = "";else b2 = b.substr(j + 1, b.length() - j - 1);string ans1 = add1(a1, b1);string ans2 = add2(a2, b2);if (ans2.length() > max(a2.length(), b2.length())) {ans2 = ans2.substr(1, ans2.length() - 1);ans1 = add1(ans1, "1");}if (ans2.length() > 0) ans2 = "." + ans2;cout << ans1 << ans2 << endl;}return 0;
}

蓝桥杯 ADV-18 算法提高 实数相加相关推荐

  1. c语言实数加法程序,蓝桥杯 算法提高 实数相加(c语言版附注释)

    试题 算法提高 实数相加 蓝桥杯试题解答汇总链接 资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 计算两个实数相加的结果. 输入的实数满足如下要求: (1)小数点前的整数部分最多10 ...

  2. 蓝桥杯 算法提高 实数相加

    算法提高 实数相加   时间限制:1.0s   内存限制:512.0MB      问题描述 计算两个实数相加的结果. 输入的实数满足如下要求: (1) 小数点前的整数部分最多100位,(2) 小数点 ...

  3. [蓝桥杯]测试题 E 算法提高 我们的征途是星辰大海 题解和C++示例代码

    E 算法提高 我们的征途是星辰大海 时间限制:1.0s   内存限制:256.0MB 最新的火星探测机器人curiosity被困在了一个二维迷宫里,迷宫由一个个方格组成. 共有四种方格: '.' 代表 ...

  4. 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(251-280)

    文章目录 ADV-251 Petri Net Simulation cpp: java: ADV-252 Navigation cpp: ADV-256 The Sky is the Limit cp ...

  5. 【蓝桥杯练习】算法提高 贪吃的大嘴

    问题描述 给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个. 输入格式 输入的第一行包含两个整数n, m,分别表示物品的个数和背包能 ...

  6. 蓝桥杯:试题 算法训练 Remember the A La Mode

    蓝桥杯:试题 算法训练 Remember the A La Mode 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参 ...

  7. 【预览】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 完整版链接 文章目录 [预览]蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分算法求分界值 2 双指针算法 2.1 求最长的不包 ...

  8. 【完整版】蓝桥杯竞赛python算法笔记 代码模板|吐血总结|蓝桥杯省赛国赛

    蓝桥杯竞赛python算法笔记 代码模板|吐血总结 文章目录 蓝桥杯竞赛python算法笔记 代码模板|吐血总结 1 二分 1.1 二分求最大满足(check红色条件) 1.2 二分求最小满足(che ...

  9. 蓝桥杯之Python算法设计系列(二)

    目录 基础算法案例 全套资源点击此处下载 1.特殊回文数 2.特殊回文数 3.A+B案例 4.数组排序 5.序列求和 6.十六进制转八进制 7.十六进制转十进制 8.查找数字出现次数 9.水仙花 10 ...

最新文章

  1. wincc里c语言long int,WinCC V7.3_C脚本手册.pdf
  2. cahrt框架 ios_iOS Charts框架集成及使用
  3. php管理智能dns,负载均衡之DNS轮询
  4. mysql ndb 关闭_Mysql NDB 常见问题
  5. 2019-2020年中国小吃产业发展报告
  6. C#算法设计排序篇之05-归并排序(附带动画演示程序)
  7. 苹果宣布CEO乔布斯辞职 COO库克接任
  8. 20款最优秀的JavaScript编辑器
  9. Python Web编程入门
  10. i310100和i59400f哪个好 i3 10100和i5 9400f差距大吗
  11. 3dmax外挂神器更新了|3dmax外挂在过去几年里,食住玩都更新记录了3dmax外挂的什么功能?
  12. 机械臂D-H坐标系的建立
  13. window.addEventlistener和document.addEventlistener区别
  14. (学习笔记)【目标检测】YOLO系列简单归纳
  15. Cadence Allegro设置区域规则
  16. 【vi】vi编辑器卡死解决方法
  17. 清除office多余的激活信息
  18. IOS端向下滑动骤停
  19. 工作中常用的oracle数据库sql
  20. 金立集团董事长-刘立荣-注意细节

热门文章

  1. 在 .NET Framework Data Provider for Microsoft SQL Server Compact 3.5 中发生错误
  2. SQL 时间截按月分组查询
  3. 基于 Android Architecture Components 的 MVVM 浅析
  4. Mac系统 python3.7安装
  5. centos7的启动过程
  6. KVM基础安装,手动创建桥
  7. 关于vim的误删除经历
  8. 7. 从数据库获取数据- 从零开始学Laravel
  9. bootstrap ie兼容
  10. js中的 substring和substr方法