高精度问题之大数相加
发布时间:2020-12-14 02:26:55 所属栏目:大数据 来源:网络整理
导读:AC代码如下: #include iostream#include stringusing namespace std;// 实现大数相加 结果存放在num中 void bigIntergerAdd(string num,string add) {int goBit = 0; // 存放进位// 先交换下顺序 加数的位数要比较少if (num.length() add.length()) {string
AC代码如下: #include <iostream> #include <string> using namespace std; // 实现大数相加 结果存放在num中 void bigIntergerAdd(string &num,string add) { int goBit = 0; // 存放进位 // 先交换下顺序 加数的位数要比较少 if (num.length() < add.length()) { string tmp = num; num = add; add = tmp; } string tmp (num.length() - add.length(),'0'); add = tmp + add; // 利用string的+号特性 不采用逆序相加法 int len1 = num.length(),len2 = add.length(); for (int i = len1 -1 ; i>= 0; --i) { int tmp = ((num[i] - '0') + (add[i] - '0') + goBit) ; num[i] = tmp% 10 + '0'; goBit = tmp/10; } // 特殊情况处理 if (goBit != 0) num.insert(0,string(1,(char)goBit +'0')); } int main(int argc,char** argv) { string s1; string result; int i =0; while (cin>> s1) { if (s1 == "0") { cout<< result<< endl; break; } if (i ==0) { i=1; result = s1; } else bigIntergerAdd(result,s1); } return 0; }解题心的: 就是基本的一对一模拟手算。。借助c++的string 不用逆序运算了。很方便的补0. ?最后处理下前导0的问题。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |