big_data_mul

来源:互联网 发布:centos设置不锁屏 编辑:程序博客网 时间:2024/06/09 21:01

#include<iostream>
#include<string>


using namespace std;


void AddTwoString(string &sum,string &tmp)
{
string s1(sum),s2(tmp),tmp1,result;
int step=0,m;
if(s1.size()<s2.size()) { tmp1=s1;s1=s2;s2=tmp1; }
string::reverse_iterator r1=s1.rbegin(),r2=s2.rbegin();
while(r2!=s2.rend())
{
  m=(*r1-'0')+(*r2-'0')+step;
  step=m/10;
  result.push_back(m%10+'0');
  r1++; r2++;
}
if(r1==s1.rend()&&step) result.push_back(step+'0');//!!!!!!!!!!!!
while(r1!=s1.rend())
{
  m=(*r1-'0')+step;
  step=m/10;
  result.push_back(m%10+'0');
  r1++;
}
tmp1="";
for(string::reverse_iterator r=result.rbegin();r!=result.rend();r++)
tmp1.push_back(*r);
sum=tmp1;
// cout<<s1<<"+"<<s2<<"="<<sum<<endl;

}



void MulTwoString(string &s1,string &s2,string &mul)
{
if(s1==""||s2=="") {cout<<"illegal input!"<<endl; return; }
for(string::iterator t1=s1.begin();t1!=s1.end();t1++) 
  if(!(*t1>='0'&&*t1<='9')) 
{cout<<"s1 is illegal input!"<<endl; return; }
for(string::iterator t2=s2.begin();t2!=s2.end();t2++) 
  if(!(*t2>='0'&&*t2<='9')) 
{cout<<"s2 is illegal input!"<<endl; return; }

string tmp,sum;
int step=0,jinwei,m,t;
if(s1.size()<s2.size()){tmp=s1;s1=s2;s2=tmp;}
// cout<<"after swap, s1="<<s1<<"  s2="<<s2<<endl;  //
for(string::reverse_iterator rt2=s2.rbegin();rt2!=s2.rend();rt2++)
{  tmp="";
  m=(*rt2)-'0';
  jinwei=0;
  //t=0;
  for(string::reverse_iterator rt1=s1.rbegin();rt1!=s1.rend();rt1++)
  {
t=m*((*rt1)-'0')+jinwei;
jinwei=t/10;
tmp.push_back((t%10)+'0');
  }
  if(jinwei)tmp.push_back(jinwei+'0');
  
  string tmp2;
  for(string::reverse_iterator r2=tmp.rbegin();r2!=tmp.rend();r2++)
tmp2.push_back(*r2);
  tmp=tmp2;

// cout<<"tmp="<<tmp<<endl;


  if(sum=="") sum=tmp;
  else{
int k=step;
while(k){  tmp.push_back('0'); k--; }
AddTwoString(sum,tmp);
  }
  step++;
}
mul=sum;
}



int main()
{
string s1,s2,mul;
//int step=0;
cout<<"enter two numbers:"<<endl;
cin>>s1;
cin.clear();
cin>>s2;
cout<<"s1="<<s1<<"\ns2="<<s2<<endl;
MulTwoString(s1,s2,mul);
if(mul!="")cout<<"s1*s2="<<mul<<endl;
return 0;
}

0 0
原创粉丝点击