#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;
}
字符串實現大數加減乘除
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.