#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;
}
字符串实现大数加减乘除
最新推荐文章于 2020-11-30 16:30:53 发布