想法极其简单。。。。没什么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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。