两个任意长度整数的加减乘除
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 100
void jia(char aa[],char bb[],int n,int m)
{
int i,temp=0,j;
int a[MAX]={0},b[MAX]={0};
int c[MAX]={0};
for(i=n-1,j=0;i>=0;i--,j++)
a[j]=aa[i]-'0';
for(i=m-1,j=0;i>=0;i--,j++)
b[j]=bb[i]-'0';
if(n<m)
n=m;
for(i=0;i<=n;i++)
{
c[i]=b[i]+a[i]+temp;
if(c[i]>=10)
{
c[i]=c[i]-10;
temp=1;
}
else
temp=0;
}
if(c[n]==0)
for(i=n-1;i>=0;i--)
printf("%d",c[i]);
else
{
for(i=n;i>=0;i--)
printf("%d",c[i]);
}
printf("\n");
}
void fun2(int a[],int b[],int n)
{
int c[MAX]={0};
int i,j,temp=0;
for(i=0;i<=n;i++)
{
c[i]=a[i]-b[i]-temp;
if(c[i]<0)
{
c[i]=c[i]+10;
temp=1;
}
else
temp=0;
}
for(i=n;i>=0;i--)
if(c[i]!=0)
break;
for(j=i;j>=0;j--)
printf("%d",c[j]);
printf("\n");
}
void cha(char aa[],char bb[],int n,int m)
{
int a[MAX]={0},b[MAX]={0};
int i,j,w;
for(i=n-1,j=0;i>=0;i--,j++)
a[j]=aa[i]-'0';
for(i=m-1,j=0;i>=0;i--,j++)
b[j]=bb[i]-'0';
if(n<m)
{
printf("-");
fun2(b,a,m);
}
if(n>m)
fun2(a,b,n);
if(n==m)
{
w=strcmp(aa,bb);
if(w>0)
fun2(a,b,n);
else
if(w<0)
{
printf("-");
fun2(b,a,n);
}
else
printf("0");
}
}
void cheng(char aa[],char bb[],int n,int m)
{
int i,temp=0,j;
int a[MAX]={0},b[MAX]={0};
int c[MAX]={0};
for(i=n-1,j=0;i>=0;i--,j++)
a[j]=aa[i]-'0';
for(i=m-1,j=0;i>=0;i--,j++)
b[j]=bb[i]-'0';
for(i=0;i<=m;i++)
{
for(j=0;j<=n;j++)
{
c[i+j]=c[i+j]+b[i]*a[j];
c[i+j]=c[i+j]+temp;
if(c[i+j]>=10)
{
temp=c[i+j];
c[i+j]=c[i+j]%10;
temp=temp/10;
}
else
temp=0;
}
}
for(i=m*n;i>=0;i--)
if(c[i]!=0)
break;
for(j=i;j>=0;j--)
printf("%d",c[j]);
printf("\n");
}
int bijiao(int a[],int b[],int j,int m)
{
int i;
int t;
for(i=j,t=1;i<m+j;i++,t++)
{
if(a[i]>b[t])
return 1;
if(a[i]<b[t])
return 2;
}
return 3;
}
int bijiao1(int a[],int b[],int j,int m)
{
int i;
int t;
for(i=j,t=1;i<m+j;i++,t++)
{
if(a[i]>b[t])
return 1;
if(a[i]<b[t])
return 2;
}
return 3;
}
void fun(int a[],int b[],int c[],int j,int m)
{
int i,t=0,temp=0,x,n;
while(t>-1)
{
temp=0;
t++;
for(i=j+m-1,n=m;i>=j&&n>0;i--,n--)
{
a[i]=a[i]-b[n]-temp;
if(a[i]<0)
{
a[i]=a[i]+10;
temp=1;
}
else
temp=0;
}
x=bijiao(a,b,j,m);
if(x==2)
break;
}
c[j]=t;
}
void fun1(int a[],int b[],int c[],int j,int m)
{
int i,t=0,temp=0;
int n,x;
while(t>-1)
{
t++;
for(i=j+m,n=m;i>=j;i--,n--)
{
a[i]=a[i]-b[n]-temp;
if(a[i]<0)
{
a[i]=a[i]+10;
temp=1;
}
else
temp=0;
}
if(a[j]==0)
{
x=bijiao1(a,b,j+1,m);
if(x==2)
break;
}
}
c[j+1]=t;
}
void chu(char aa[],char bb[],int n,int m)
{
int x,v=1;
int a[MAX]={0},i;
int b[MAX]={0},j;
int c[MAX]={0},flog=1;
char w[MAX];
for(i=0;i<m;i++)
w[i]=aa[i];
flog=strcmp(w,bb);
for(i=0;i<n;i++)
a[i]=aa[i]-'0';
for(i=0;i<m;i++)
b[i+1]=bb[i]-'0';
j=0;
while(v)
{
if(a[j]==0)
{
j++;
if(j+m>n+1)
break;
continue;
}
x=bijiao(a,b,j,m);
if(x==1||x==3)
fun(a,b,c,j,m);
else
{
if(j+m>=n)
break;
fun1(a,b,c,j,m);
}
if(j+m>=n+1)
break;
if(a[j]==0)
j++;
}
if(flog>=0)
n=n/m+1;
else
n=n/m;
printf("商:");
for(j=0;j<n;j++)
printf("%d",c[j]);
for(i=0;i<MAX;i++)
if(a[i]!=0)
break;
for(v=MAX-1;v>=0;v--)
if(a[v]!=0)
break;
if(i<=v)
{
printf("\n余:");
for(;i<=v;i++)
printf("%d",a[i]);
}
else
printf("\n余:0");
printf("\n");
}
void main()
{
int n,m;
char aa[MAX],bb[MAX];
printf("请输入第一个大数:");
gets(aa);
n=strlen(aa);
printf("请输入第二个大数:");
gets(bb);
m=strlen(bb);
printf("两个数之和:");
jia(aa,bb,n,m);
printf("两个数之差:");
cha(aa,bb,n,m);
printf("两个数乘:");
cheng(aa,bb,n,m);
printf("两个数之除:");
chu(aa,bb,n,m);
}
posted on 2012-08-04 00:18 ma1076492641 阅读(457) 评论(0) 编辑 收藏 举报