您的位置:首页 > 其它

大数加法和大数乘法

2013-08-22 15:59 204 查看
想法极其简单。。。。没什么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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: