1、大数加法
#include <iostream>
#include <string>
using namespace std;
char a[1000],b[1000],s[10000];
void add(char a[],char b[],char s[])//a被加数,b加数,s和
{
int i,j,k,up,x,y,z,l;
char *c;
if (strlen(a)>strlen(b)) l=strlen(a)+2; else l=strlen(b)+2;
c=(char *) malloc(l*sizeof(char));
i=strlen(a)-1;
j=strlen(b)-1;
k=0;up=0;
while(i>=0||j>=0)
{
if(i<0) x='0'; else x=a[i];
if(j<0) y='0'; else y=b[j];
z=x-'0'+y-'0';
if(up) z+=1;
if(z>9) {up=1;z%=10;} else up=0;
c[k++]=z+'0';
i--;j--;
}
if(up) c[k++]='1';
i=0;
c[k]=' ';
for(k-=1;k>=0;k--)
s[i++]=c[k];
s[i]=' ';
}
int main()
{
cin>>a>>b;
add(a,b,s);
cout<<s<<endl;
return 0;
}
2、大数减法
#include <iostream>
using namespace std;
char a[1000],b[1000],s[10000];
void sub(char a[],char b[],char s[])
{
int i,l2,l1,k;
l2=strlen(b);l1=strlen(a);
s[l1]=' ';l1--;
for (i=l2-1;i>=0;i--,l1--)
{
if (a[l1]-b[i]>=0)
s[l1]=a[l1]-b[i]+'0';
else
{
s[l1]=10+a[l1]-b[i]+'0';
a[l1-1]=b[l1-1]-1;
}
}
k=l1;
while(a[k]<0) {a[k]+=10;a[k-1]-=1;k--;}
while(l1>=0) {s[l1]=a[l1];l1--;}
loop:
if (s[0]=='0')
{
l1=strlen(a);
for (i=0;i<l1-1;i++) s[i]=s[i+1];
s[l1-1]=' ';
goto loop;
}
if (strlen(s)==0) {s[0]='0';s[1]=' ';}
}
int main()
{
cin>>a>>b;
sub(a,b,s);
cout<<s<<endl;
return 0;
}
3、大数乘法
#include <iostream>
#include <string>
using namespace std;
char a[1000],b[1000],s[10000];
void mult(char a[],char b[],char s[]) //a被乘数,b乘数,s为积
{
int i,j,k=0,alen,blen,sum=0,res[65][65]={0},flag=0;
char result[65];
alen=strlen(a);
blen=strlen(b);
for (i=0;i<alen;i++)
for (j=0;j<blen;j++)
res[i][j]=(a[i]-'0')*(b[j]-'0');
for (i=alen-1;i>=0;i--)
{
for (j=blen-1;j>=0;j--) sum=sum+res[i+blen-j-1][j];
result[k]=sum%10;
k=k+1;
sum=sum/10;
}
for (i=blen-2;i>=0;i--)
{
for (j=0;j<=i;j++) sum=sum+res[i-j][j];
result[k]=sum%10;
k=k+1;
sum=sum/10;
}
if (sum!=0) {result[k]=sum;k=k+1;}
for (i=0;i<k;i++) result[i]+='0';
for (i=k-1;i>=0;i--) s[i]=result[k-1-i];
s[k]=' ';
while(1)
{
if (strlen(s)!=strlen(a)&&s[0]=='0')
strcpy(s,s+1);
else
break;
}
}
int main()
{
cin>>a>>b;
mult(a,b,s);
cout<<s<<endl;
return 0;
}
4、大数取余
int mod(int B) //A为大数,B为小数
{
int i = 0,r = 0;
while( A[i] != ' ' )
r=(r*10+A[i++]-'0')%B;
return r ; //r为余数
}