带小数的大数相加,C++实现

带小数的大数相加,C++实现描述 用 string 字符串存放两个数字 long long 放不下 返回 string 字符串形式的相加结果 关键 拆分为整数部分和小数部分 先进行小数部分相加 小数部分先填充 0 再反转 再相加 整数部分先反转 再填充 0 再相加

大家好,我是讯享网,很高兴认识大家。

描述

用string字符串存放两个数字(long long放不下),返回string字符串形式的相加结果
关键:拆分为整数部分和小数部分;先进行小数部分相加;小数部分先填充0,再反转,再相加;整数部分先反转,再填充0,再相加;注意进位


讯享网

代码

#include <iostream> #include<vector> #include<string> #include<algorithm> using namespace std; int main() { string s1, s2; while (cin >> s1 >> s2) { string s3; int index1 = s1.find('.'); int index2 = s2.find('.'); string s1xiaoshu = ""; string s2xiaoshu = ""; string s1zhengshu = ""; string s2zhengshu = ""; string res2; //小数相加结果 string res1; //整数相加结果 int jinwei = 0; /小数部分相加,先填充0,再反转/ if (index1 != -1 || index2 != -1) { if (index1 != -1) { for (int i = index1 + 1; i < s1.size(); i++) { s1xiaoshu += s1[i]; } } if (index2 != -1) { for (int i = index2 + 1; i < s2.size(); i++) { s2xiaoshu += s2[i]; } } s1xiaoshu.size() > s2xiaoshu.size() ? s2xiaoshu.resize(s1xiaoshu.size(), '0') : s1xiaoshu.resize(s2xiaoshu.size(), '0'); //先填充0 reverse(s1xiaoshu.begin(), s1xiaoshu.end()); //再反转 reverse(s2xiaoshu.begin(), s2xiaoshu.end()); for (int i = 0; i < s1xiaoshu.size(); i++) { res2 += to_string((s1xiaoshu[i] + s2xiaoshu[i] - 2 * '0' + jinwei) % 10); jinwei = (s1xiaoshu[i] + s2xiaoshu[i] - 2 * '0' + jinwei) / 10; } reverse(res2.begin(), res2.end()); //最后反转回来 } /整数部分相加,先反转,再填充0/ if (index1 != -1) { for (int i = 0; i < index1; i++) { s1zhengshu += s1[i]; } } else s1zhengshu = s1; if (index2 != -1) { for (int i = 0; i < index2; i++) { s2zhengshu += s2[i]; } } else s2zhengshu = s2; int max_length = max(s1zhengshu.size(), s2zhengshu.size()); reverse(s1zhengshu.begin(), s1zhengshu.end()); //先反转 reverse(s2zhengshu.begin(), s2zhengshu.end()); //再填充0 s1zhengshu.size() > s2zhengshu.size() ? s2zhengshu.resize(max_length, '0') : s1zhengshu.resize(max_length, '0'); for (int i = 0; i < max_length; i++) { res1 += to_string((s1zhengshu[i] + s2zhengshu[i] - 2 * '0' + jinwei) % 10); jinwei = (s1zhengshu[i] + s2zhengshu[i] - 2 * '0' + jinwei) / 10; } if (jinwei) { string syu = to_string(jinwei); res1 += syu; } reverse(res1.begin(), res1.end()); //最后反转回来 /整数相加结果与小数相加结果,拼接/ if (index1 != -1 || index2 != -1) { s3 = res1 + '.' + res2; } else s3 = res1; for (int i = 0; i < s3.size(); i++) { cout << s3[i]; } } return 0; } 

讯享网

示例:
在这里插入图片描述

小讯
上一篇 2025-01-29 15:00
下一篇 2025-02-11 20:55

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/33291.html