内容简介:问题描述输入格式两行字符串,每行都是一个合法的实数。合法的意思是指:整数部分的值如果大于零,则最高位数字必定大于零. 如果整数部分的值为零,则整数部分只有一个零. 小数部分尾部可以有任意多的零. 可以没有小数部分,此时也没有小数点. 如果有小数点, 则至少需要有一位小数部分, 且允许是零.
问题描述
计算两个实数相加的结果。
输入格式
两行字符串,每行都是一个合法的实数。合法的意思是指:整数部分的值如果大于零,则最高位数字必定大于零. 如果整数部分的值为零,则整数部分只有一个零. 小数部分尾部可以有任意多的零. 可以没有小数部分,此时也没有小数点. 如果有小数点, 则至少需要有一位小数部分, 且允许是零.
输出格式
相加结果。注意: 小数部分末尾如果有连续的0, 则它们都是有效数字,不能舍去. 如果是两个整数相加, 则结果仍为整数而没有小数部分.
样例输入
分析: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; }❤❤点击这里 -> 订阅PAT、蓝桥杯、GPLT天梯赛、LeetCode题解离线版❤❤
以上所述就是小编给大家介绍的《蓝桥杯 ADV-18 算法提高 实数相加》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 深度学习实战 numpy生成实数序列
- 如何备战蓝桥杯拿到省一
- 蓝桥杯 ADV-126 算法提高 扫雷
- 蓝桥杯 ADV-133 算法提高 彩票
- 蓝桥杯 ALGO-112 算法训练 暗恋
- 蓝桥杯 算法训练 审美课 java
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Intersectional Internet
Safiya Umoja Noble、Brendesha M. Tynes / Peter Lang Publishing / 2016
From race, sex, class, and culture, the multidisciplinary field of Internet studies needs theoretical and methodological approaches that allow us to question the organization of social relations that ......一起来看看 《The Intersectional Internet》 这本书的介绍吧!