大数加法
发布时间:2020-12-14 03:39:54 所属栏目:大数据 来源:网络整理
导读:示例: 88888888888888888888(20位)+22222222222222222222(20位)=99999999999999999999(20位) 思想:由于int型最大为10亿左右,当超过这个位数的时候,将会给计算带来问题,这时候就需要大数计算。 这里讲数字按位储存在数组里面进行操作~ 然后对数组
示例: 88888888888888888888(20位)+22222222222222222222(20位)=99999999999999999999(20位) 思想:由于int型最大为10亿左右,当超过这个位数的时候,将会给计算带来问题,这时候就需要大数计算。 这里讲数字按位储存在数组里面进行操作~ 然后对数组进行按位加,需要注意的就是进位操作。 /* Title:大数加法 Author:Dojking */ #include <iostream> #include <string> using namespace std; void swap(string &plus1,string &plus2) /*交换两数*/ { string t; t = plus1; plus1 = plus2; plus2 = t; } void BigPlus(string plus1,string plus2) /*大数加法*/ { int i,j,num,len1,len2; len1 = plus1.size()-1; len2 = plus2.size()-1; int *strplus = new int[len1+2]; /*动态开辟空间*/ for (i = 0; i <= len1+1; ++i) strplus[i] = 0; /*初始化为0*/ for (i = len1,j = len2; i >= 0; --i,--j)/*plus1位数不小于plus2位数*/ { if (j >= 0) num = (plus1[i]-'0') + (plus2[j]-'0'); /*和*/ else num = (plus1[i]-'0'); /*和*/ if (num >= 10) { strplus[i+1] += (num-10); /*本位*/ strplus[i] = 1; /*高位:进1*/ } else { strplus[i+1] += num; /*本位*/ } } i = strplus[0] == 0 ? 1 : 0; /*舍去高位无用0*/ for ( ; i <= len1+1; ++i) /*打印结果*/ cout<<strplus[i]; cout<<endl; delete[] strplus; strplus = NULL; } int main() { string plus1,plus2; cin>>plus1>>plus2; if (plus1.size() < plus2.size()) /*使plus1位数不小于plus2*/ swap(plus1,plus2); BigPlus(plus1,plus2); /*大数加法*/ return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |