#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N=10000;
struct Num
{
int s[N];
int len;
};
Num operator*(Num a,Num b);
Num operator*(Num a,int n);
Num operator+(Num a,Num b);
Num operator*(Num a,Num b)//大数相乘
{
Num sum;
sum.len =0;
for(int i=0;i<b.len;i++){
Num nu;
nu.len=0;
nu=a*b.s[i];
for(int j=i+nu.len-1;j>=i;j--)
{
nu.s[j]=nu.s[j-i];
}
for(int z=0;z<i;z++){
nu.s[z]=0;
}
nu.len+=i;
sum=sum+nu;
}
return sum;
}
Num operator*(Num a,int n)
{
int r=0;
Num sum;
sum.len=0;
for(int i=0;i<a.len;i++)
{
sum.s[i]=r+a.s[i]*n;
r=sum.s[i]/10;
sum.s[i]=sum.s[i]%10;
sum.len++;
}
while(r!=0)
{
sum.s[sum.len++]=r%10;
r=r/10;
}
return sum;
}
Num operator+(Num a,Num b)//大数相加
{
Num sum;
sum.len=0;
int len1=a.len<b.len ?a.len :b.len ;
int r=0;
for(int i=0;i<len1;i++){
sum.s[i]=a.s[i]+b.s[i]+r;
r=sum.s[i]/10;
sum.s[i]=sum.s[i]%10;
sum.len ++;
}
while(a.len>len1){
sum.s[sum.len ]=a.s[len1++]+r;
r=sum.s[sum.len ]/10;
sum.s[sum.len ]%=10;
sum.len++;
}
while(b.len>len1){
sum.s[sum.len ]=b.s[len1++]+r;
r=sum.s[sum.len ]/10;
sum.s[sum.len ]%=10;
sum.len++;
}
return sum;
}
大整数数相加和相乘
最新推荐文章于 2019-06-20 18:47:00 发布