大数加法和大数乘法
发布时间:2020-12-14 04:01:38 所属栏目:大数据 来源:网络整理
导读:想法极其简单。。。。没什么trick void reverseVector(vectorint vec){for(int i=0,j=vec.size()-1;ij;++i,--j){int t = vec.at(i);vec.at(i) = vec.at(j);vec.at(j) = t;}}vectorint addtwo(vectorint num1,vectorint num2){reverseVector(num1);reverseVec
想法极其简单。。。。没什么trick void reverseVector(vector<int> &vec){ for(int i=0,j=vec.size()-1;i<j;++i,--j){ int t = vec.at(i); vec.at(i) = vec.at(j); vec.at(j) = t; } } vector<int> addtwo(vector<int> &num1,vector<int> &num2){ reverseVector(num1);reverseVector(num2); int jinwei = 0; vector<int> sum; int i = 0; for(i=0;i<num1.size() && i<num2.size();++i){ int tmpsum = num1.at(i) + num2.at(i) + jinwei; jinwei = tmpsum/10; tmpsum %= 10; sum.push_back(tmpsum); } while(i<num1.size()){ int tmpsum = num1.at(i++) + jinwei; jinwei = tmpsum/10; tmpsum %= 10; sum.push_back(tmpsum); } while(i<num2.size()){ int tmpsum = num2.at(i++) + jinwei; jinwei = tmpsum/10; tmpsum %= 10; sum.push_back(tmpsum); } if(jinwei != 0) sum.push_back(jinwei); reverseVector(sum); return sum; } void multitwo(){ string numStr1,numStr2; vector<int> num1,num2,result,tmpre; cin>>numStr1>>numStr2; bool negbool = false; negbool = (numStr1.at(0) == '-') ^ (numStr2.at(0) == '-'); for(int i=(numStr1.at(0)=='-')?1:0;i<numStr1.length();++i) if(numStr1.at(i)<='9' && numStr1.at(i)>='0') num1.push_back(numStr1.at(i)-'0'); else{ error = true; return; } for(int i=(numStr2.at(0)=='-')?1:0;i<numStr2.length();++i) if(numStr2.at(i)<='9' && numStr2.at(i)>='0') num2.push_back(numStr2.at(i)-'0'); else{ error = true; return; } reverseVector(num1); reverseVector(num2); result.clear(); for(int i=0;i<num1.size();++i){ tmpre.clear(); int number = num1.at(i); int jinwei = 0; for(int j=0;j<num2.size();++j){ int tmpsum = number*num2.at(j) + jinwei; jinwei = tmpsum/10; tmpsum = tmpsum%10; tmpre.push_back(tmpsum); } if(jinwei != 0) tmpre.push_back(jinwei); //局部加法 reverseVector(result); //tmpre右移i位 for(int j=0;j<i;++j) tmpre.push_back(0); for(int j=tmpre.size()-1;j>=i;--j) tmpre.at(j) = tmpre.at(j-i); for(int j=0;j<i;++j) tmpre.at(j) = 0; reverseVector(tmpre); result = addtwo(result,tmpre); reverseVector(result); } reverseVector(result); int i = 0; while(result.size()!=1){ if(result.at(i) != 0) break; result.erase(result.begin()+i); } if(negbool && result.at(0)!=0) cout<<"-"; for(int i=0;i<result.size();++i) cout<<result.at(i); cout<<endl; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |