加法
#include<stdio.h>
#include<string.h>
#define N 510
int main()
{
char a[N],b[N];
while(scanf("%s%s",a,b)!=EOF)
{
int n_a[N]={0},n_b[N]={0},sum[N]={0},an,bn,k,i;
an=strlen(a);bn=strlen(b);
k=an>bn?an:bn;
for(i=0;i<an;i++)
n_a[i]=a[an-1-i]-'0';
for(i=0;i<bn;i++)
n_b[i]=b[bn-1-i]-'0';
for(i=0;i<k;i++)
sum[i]=n_a[i]+n_b[i];
for(i=0;i<k;i++)
if(sum[i]>9)
{
sum[i+1]++;
sum[i]%=10;
}
for(i=N-1;sum[i]==0&&i>0;i--)
;
for(;i>=0;i--)
printf("%d",sum[i]);
printf("\n");
}
return 0;
}
减法
#include<stdio.h>
#include<string.h>
#define N 110
char a[N],b[N];
int A[N],B[N],C[N];
void solve(int a[],int b[])
{
int i;
for(i=0;i<N;i++)
{
C[i]=a[i]-b[i];
if(C[i]<0)
C[i]+=10,a[i+1]-=1;
}
}
int main()
{
int i,j;
while(scanf("%s%s",a,b)!=EOF)
{
memset(A,0,sizeof(A));
memset(B,0,sizeof(B));
memset(C,0,sizeof(C));
int la,lb,lA,lB;
la=strlen(a),lb=strlen(b);
for(i=la-1,j=0;i>=0&&j<la;i--,j++)
{
A[j]=a[i]-'0';
if(A[j]!=0)
lA=j+1;
}
for(i=lb-1,j=0;i>=0&&j<lb;i--,j++)
{
B[j]=b[i]-'0';
if(B[j]!=0)
lB=j+1;
}
if(lA>lB)
solve(A,B);
else if(lB>lA)
{
printf("-");
solve(B,A);
}
else
{
if(strcmp(a+la-lA,b+lb-lB)>=0)
solve(A,B);
else
{
printf("-");
solve(B,A);
}
}
for(i=N-1;C[i]==0&&i>0;i--)
;
for(;i>=0;i--)
printf("%d",C[i]);
putchar('\n');
}
return 0;
}
乘法
#include<stdio.h>
#include<string.h>
int main()
{
int i,j,k,la,lb,n_a[50]={0},n_b[50]={0},sum[100]={0};
char a[50],b[50];
scanf("%s%s",a,b);
la=strlen(a);lb=strlen(b);
for(i=0;i<la;i++)
n_a[i]=a[la-i-1]-'0';
for(i=0;i<lb;i++)
n_b[i]=b[lb-i-1]-'0';
for(i=0;i<lb;i++)
for(j=0;j<la;j++)
sum[i+j]+=n_a[j]*n_b[i];
k=la+lb-1;
for(i=0;i<k;i++)
{
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
if(sum[i])
k++;
for(i=k;sum[i-1]==0&&i>1;i--)
;
for(i--;i>=0;i--)
printf("%d",sum[i]);
}
除法
#include<stdio.h>
#include<string.h>
#define Max 1005
int fun(int A[],int B[],int la,int lb)
{
if(la<lb)
return -1;
int i;
if(la==lb)
{
for(i=la-1; i>=0; i--)
{
if(A[i]>B[i])
break;
if(A[i]<B[i])
return -1;
}
}
for(i=0; i<la; i++)
{
A[i]=A[i]-B[i];
if(A[i]<0)
A[i]+=10,A[i+1]-=1;
}
for(i=la-1; i>=0; i--)
if(A[i])
return i+1;
return 0;
}
int main()
{
int ntime,ntemp,la,lb,A[Max],B[Max],C[Max];
char a[Max],b[Max];
while(scanf("%s%s",a,b)!=EOF)
{
for(int i=0; i<Max; i++)
A[i]=B[i]=C[i]=0;
la=strlen(a);
lb=strlen(b);
int lA,lB;
for(int i=0,j=la-1; j>=0; i++,j--)
{
A[i]=a[j]-'0';
if(A[i]!=0)
lA=i+1;
}
for(int i=0,j=lb-1; j>=0; i++,j--)
{
B[i]=b[j]-'0';
if(B[i]!=0)
lB=i+1;
}
if(lA<lB)
{
printf("0\n");
continue;
}
ntime=lA-lB;
for(int i=lA-1; i>=0; i--)
{
if(i>=ntime)
B[i]=B[i-ntime];
else
B[i]=0;
}
lB=lA;
for(int i=0; i<=ntime; i++)
while((ntemp=fun(A,B+i,lA,lB-i))>=0)
{
lA=ntemp;
C[ntime-i]++;
}
int i;
for(i=Max-1; i>0&&C[i]==0; i--)
;
for(; i>=0; i--)
printf("%d",C[i]);
putchar('\n');
}
return 0;
}