高精度问题之大数相加

来源:互联网 发布:云计算的历史 编辑:程序博客网 时间:2024/05/01 11:50

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的问题。

0 0