2013年3月29日 星期五

c++ 大數加法



#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
 vector<int>bit1,bit2;
 string input1,input2;
 int length1,length2,tmp;
 bool flag=0,next=0;   //預先判斷要不要進位;下一次進算時把進位的數字加上去

 cout<<"輸入第一個數字"<<endl;
 cin>>input1;
 cout<<"輸入第二個數字"<<endl;
 cin>>input2;

 for(int i=0;i<=input1.length()-1;i++)  //把string的char一個一個存成int
  bit1.push_back(input1[i]-'0');
 for(int j=0;j<=input2.length()-1;j++)
  bit2.push_back(input2[j]-'0');

 length1=input1.length()-1;
 length2=input2.length()-1;

 if(length1>=length2)      //當第1個字串大於第2個字串時
  while(1)
  {
   if(length2==-1)
   {
    bit1[length1]=(bit1[length1]+next)%10;
    if(next==1)
    {
     bit1.push_back(next);
     for(int k=0;k<=input1.length();k++)
     {
      tmp=bit1[k];
      bit1[k]=bit1[input1.length()];
      bit1[input1.length()]=tmp;
     }
    }
    break;
   }
   if((bit1[length1]+bit2[length2])>=10)
    flag=1;
   bit1[length1]=(bit1[length1]+bit2[length2])%10+next;
   next=flag;
   flag=0;
   length1--;
   length2--;
  }
 else          //當第2個字串大於第1個字串時
  while(1)
  {
   if(length1==-1)
   {
    bit2[length2]=(bit2[length2]+next)%10;
    if(next==1)
    {
     bit2.push_back(next);
     for(int k=0;k<=input2.length();k++)
     {
      tmp=bit2[k];
      bit2[k]=bit2[input2.length()];
      bit2[input2.length()]=tmp;
     }
    }
    break;
   }
   if((bit1[length1]+bit2[length2])>=10)
    flag=1;
   bit2[length2]=(bit1[length1]+bit2[length2])%10+next;
   next=flag;
   flag=0;
   length1--;
   length2--;
  }

  if(input1.length() >= input2.length())
  {
   if(next==1)
    for(int i=0;i<=input1.length();i++)
     cout<<bit1[i];
   else
    for(int i=0;i<=input1.length()-1;i++)
     cout<<bit1[i];
  }
  else
  {
   if(next==1)
    for(int i=0;i<=input1.length();i++)
     cout<<bit1[i];
   else
    for(int i=0;i<=input1.length()-1;i++)
     cout<<bit1[i];
  }
  cout<<endl;
 return 0;
}

沒有留言:

張貼留言