字符串實現大數加減乘除

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdlib>
using namespace std;
const int MAXINT =1001;
class BigInteger
{
	public:
		BigInteger()
		{
			memset(digit,0,sizeof(digit));
			length = 0;
		}
		BigInteger(string &str)//字符串數字 ,個位在前面(方便計算操作),放入digit數組中; 
		{
			memset(digit,0,sizeof(digit));
		    length=str.size();
			for(int i=0;i<str.size();++i)
				digit[i]=str[str.size()-1-i]-'0';
		}
		//字符串加法 
		BigInteger operator+(const BigInteger &b)
		{
			BigInteger answer;
			int carry = 0;//進位
			int maxlength = length>b.length?length:b.length;
			for(int i=0;i<maxlength;++i)
			{
				int current = digit[i] + b.digit[i] + carry;
				carry = current /10; //進位,小於10爲0,大於10爲1;
				answer.digit[answer.length++]=current%10;
			} 
			if(carry != 0 )
				answer.digit[answer.length++] = carry;			
			return answer;
		}
		//字符串減法 
		BigInteger operator-(BigInteger &b)
		{
			BigInteger answer;
			int carry=0;
			for(int i=0;i<length;i++)
			{
				int current = digit[i] - b.digit[i] -carry;
				if(current < 0)
				{
					current += 10;
					carry =1; //借位 
				}
				else
				  carry =0; 
				  
				answer.digit[answer.length++]=current;
			}
			
			while(answer.digit[answer.length-1]==0 && answer.length>1)//去掉開頭的0 
				answer.length--;
			return answer;
		}
		//字符串乘法 
		BigInteger operator*(BigInteger &b)
		{
			BigInteger answer;
			answer.length = length+b.length; //最長就是兩數長度之和,小於這個長度的話要刪去開頭的0; 
			for(int i=0;i<length;++i)
				for(int j=0;j<b.length;++j)
					answer.digit[i+j] += digit[i]*b.digit[j];  //乘法豎式中,i*j 在結果的i+j位置。每個i+j相等的結果加起來就行 
 		
		 	for(int i=0;i<answer.length;++i)  //處理進位 (個位在前面)
				{ 
					int carry = answer.digit[i] / 10; //carry是否有進位,0或1; 
					answer.digit[i+1] += carry;	 
	 				answer.digit[i] = answer.digit[i]%10; //低位減去進位的10; 
	 			} 
	 		while(answer.digit[length]==0 && answer.length >1)
			 	answer.length--;	
	 			
	 		return answer; 
		}
		
		//字符串除法 
		BigInteger operator/(BigInteger & b)
		{
			int remainder =0;
			for(int i=length-1;i>=0;--i)
			{
				
			}
		}
		void printAnswer()
		{
			for(int i=length-1;i>=0;--i)
				cout<<digit[i];
		}
	public:
	int digit[MAXINT];
	int length;
};
int main()
{
	string str1;
	string str2;
	while(cin>>str1 && cin>>str2)
	{
		BigInteger a(str1);
		BigInteger b(str2);
	
		BigInteger answer = a*b;
		answer.printAnswer();	
		cout<<endl;	 
	}
	
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章