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