📄 text1.cpp
字号:
#include "stdio.h"
int max(int a,int b)
{int z;
z=(a>b)?a:b;
return z;
}/*求两个数中较大的那个数*/
int bijiao(int *a,int *b,int j,int k)
{
int z;
if(j>k) z=1;
else if(j<k) z=0;
else
{
{while(a[j-1]==b[j-1]&&j>=1)
j--;}
if(a[j-1]>b[j-1]) z=1;
else if(a[j-1]<b[j-1]) z=0;
else z=-1;
}
return z;
}/*比较两个数组的大小*/
void jia( int *c, int *d, int j, int k)
{
int i,t=max(j,k),z;
if(c[j-1]!=-3&&d[k-1]!=-3)
{for(i=0;i<t+1;i++)
{c[i]+=d[i];
if(c[i]>=10)
{c[i+1]++;
c[i]=c[i]%10;}
}
while(c[i]==0&&i>=1)
i--;
for(;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
else if(c[j-1]==-3&&d[k-1]==-3)
{c[j-1]=0;
d[k-1]=0;
for(i=0;i<t;i++)
{c[i]+=d[i];
if(c[i]>=10)
{c[i+1]++;
c[i]=c[i]%10;}
}
c[t]=45;
printf("%c",c[t]);
for(i=t-1;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
else if(c[j-1]==-3&&d[k-1]!=-3)
{
if(j>k+1)
{c[j-1]=0;
for(i=0;i<j-1;i++)
{c[i]-=d[i];
if(c[i]<0)
{c[i+1]--;
c[i]+=10;}
}
c[j-1]=45;
printf("%c",c[j-1]);
for(i=j-2;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
else if(j==k+1)
{
c[j-1]=0;
z=bijiao( c, d, j-1, k);
if(z==1)
{for(i=0;i<j-1;i++)
{c[i]-=d[i];
if(c[i]<0)
{c[i+1]--;
c[i]+=10;}
}
c[j-1]=45;
printf("%c",c[j-1]);
for(i=j-2;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
else if(z==0)
{for(i=0;i<j-1;i++)
{d[i]-=c[i];
if(d[i]<0)
{d[i+1]--;
d[i]+=10;}
}
for(i=j-1;i>=0;i--)
printf("%d",d[i]);
printf("\n");
}
else
{printf("%d",c[j-1]);
printf("\n");}
}
else
{c[j-1]=0;
for(i=0;i<k;i++)
{d[i]-=c[i];
if(d[i]<0)
{d[i+1]--;
d[i]+=10;}
}
for(i=k-1;i>=0;i--)
printf("%d",d[i]);
printf("\n");
}
}
else
{
if(k>j+1)
{d[k-1]=0;
for(i=0;i<k-1;i++)
{d[i]-=c[i];
if(d[i]<0)
{d[i+1]--;
d[i]+=10;}
}
d[k-1]=45;
printf("%c",d[k-1]);
for(i=k-2;i>=0;i--)
printf("%d",d[i]);
printf("\n");
}
else if(k==j+1)
{
d[k-1]=0;
z=bijiao( c, d, j, k-1);
if(z==1)
{for(i=0;i<j;i++)
{c[i]-=d[i];
if(c[i]<0)
{c[i+1]--;
c[i]+=10;}
}
while(c[i]==0&&i>=1)
i--;
for(;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
else if(z==-1)
{printf("%d",d[k-1]);
printf("\n");}
else
{d[k-1]=0;
for(i=0;i<k-1;i++)
{d[i]-=c[i];
if(d[i]<0)
{d[i+1]--;
d[i]+=10;}
}
d[k-1]=45;
printf("%c",d[k-1]);
for(i=k-2;i>=0;i--)
printf("%d",d[i]);
printf("\n");
}
}
else{
d[k-1]=0;
for(i=0;i<j-1;i++)
{c[i]-=d[i];
if(c[i]<0)
{c[i+1]--;
c[i]+=10;}
}
while(c[i]==0&&i>=1)
i--;
for(;i>=0;i--)
printf("%d",c[i]);
printf("\n");
}
}
}/*大数加法*/
void jian( int *c, int *d, int j,int k)
{
if(c[j-1]!=-3&&d[k-1]==-3)
{d[k-1]=0;
jia(c,d,j,k);}
else if(c[j-1]==-3&&d[k-1]!=-3)
{d[k]=-3;
jia(c,d,j,k+1);}
else if(c[j-1]==-3&&d[k-1]==-3)
{d[k-1]=0;
jia(c,d,j,k);}
else
{d[k]=-3;
jia(c,d,j,k+1);}
}/*大数减法*/
void cheng(int *a,int *b,int *m,int j,int k,int x)
{
int i,t;
if
(a[j-1]!=-3&&b[k-1]!=-3)
{for(i=0;i<j;i++)
{for(t=0;t<k;t++)
{m[t+i]+=a[i]*b[t];
if(m[t+i]>=10)
{m[t+i+1]+=m[t+i]/10;
m[t+i]=m[t+i]%10;}
}
}
if(x)
{i=j+k-1;
while(m[i]==0&&i>=1)
i--;
for(;i>=0;i--)
printf("%d",m[i]);
printf("\n");
}
}
else if(a[j-1]==-3&&b[k-1]!=-3)
{a[j-1]=0;
for(i=0;i<j;i++)
{for(t=0;t<k;t++)
{m[t+i]+=a[i]*b[t];
if(m[t+i]>=10)
{m[t+i+1]+=m[t+i]/10;
m[t+i]=m[t+i]%10;}
}
}
if(x)
{m[j+k-1]=45;
printf("%c",m[j+k-1]);
for(i=j+k-2;i>=0;i--)
printf("%d",m[i]);
printf("\n");}
}
else if
(a[j-1]!=-3&&b[k-1]==-3)
{b[k-1]=0;
for(i=0;i<j;i++)
{for(t=0;t<k;t++)
{m[t+i]+=a[i]*b[t];
if(m[t+i]>=10)
{m[t+i+1]+=m[t+i]/10;
m[t+i]=m[t+i]%10;}
}
}
if(x)
{m[j+k-1]=45;
printf("%c",m[j+k-1]);
for(i=j+k-2;i>=0;i--)
printf("%d",m[i]);
printf("\n");}
}
else
{a[j-1]=0;
b[k-1]=0;
for(i=0;i<j;i++)
{for(t=0;t<k;t++)
{m[t+i]+=a[i]*b[t];
if(m[t+i]>=10)
{m[t+i+1]+=m[t+i]/10;
m[t+i]=m[t+i]%10;}
}
}
if(x)
{for(i=j+k-2;i>=0;i--)
printf("%d",m[i]);
printf("\n");}
}
}/*大数乘法*/
void chu(int *a,int *b,int *m,int *N,int *X,int j,int k,int x)
{int i,z=0,t;
printf("\n");
if(a[j-1]!=-3&&b[k-1]!=-3)
{
if(bijiao(a,b,j,k)==0)
{z=0;
printf("%d",z);}
else if(bijiao(a,b,j,k)==0)
{t=1;
printf("%d\n",t);}
else if(k==1&&b[0]==0)
{printf("对不起,除数不能为0!\n");}
else
{for(i=j-1;i>=0;i--)
{for(;z==0||z==-1;)
{N[i]++;
cheng(b,N,m,k,j,0);
z=bijiao(m,X,200,200);
for(t=0;t<200;t++)
{m[t]=0;}
}
z--;
N[i]--;}
}
if(x)
i=j-1;
while(N[i]==0&&i>=1)
i--;
for(;i>=0;i--)
printf("%d",N[i]);
printf("\n");
}
else
printf("对不起,请输入两个正数!\n");
}/*大数除法*/
void mo(int *a,int *b,int *m,int *N,int *X,int j,int k)
{
if(a[j-1]!=-3&&b[k-1]!=-3)
{
int z,t;
z=bijiao(a,b,j,k);
if(z==-1)
{t=0;
printf("%d",t);
printf("\n");
}
else if(z==0)
{for(t=j-1;t>=0;t--)
printf("%d",a[t]);
printf("\n");
}
else
{chu(a,b,m,N,X,j,k,0);
cheng(N,b,m,j,k,0);
jian(a,m,j,j);
}
}
else
printf("对不起,请输入两个正数!\n");
}/*大数求模*/
void chengfang(int *a,int *b,int *m,int*N,int j,int k)
{int i,t;
if(k>2)
printf("对不起,超出运算范围!\n");
else
{if(a[j-1]==-3&&b[k-1]==-3)
printf("对不起,请输入两个正数!\n");
else if(j==1&&a[0]==0)
{printf("对不起,请输入两个正数!\n");}
else if(k==1&&b[0]==0)
{i=1;
printf("%d",i);
printf("\n");
}
else
{
for(i=0;i<99;i++)
N[i]=a[i];
t=10*b[1]+b[0];
t--;
for(;t>=1;t--)
{
cheng(a,N,m,99,99,0);
for(i=0;i<99;i++)
a[i]=m[i];
for(i=99;i>=0;i--)
m[i]=0;}
a[100]=0;
a[101]=0;
i=199;
while(a[i]==0&&i>=1)
i--;
for(;i>=0;i--)
printf("%d",a[i]);
printf("\n");}
}
}/*大数乘方*/
void main()
{
static char c[100]={0},d[100]={0};
static int j,k;
static int a[100]={0},b[100]={0},N[100]={0},m[200]={0},X[200]={0};
int i,t,x;
printf(" **************************\n");
printf(" * 大数计算器 *\n");
printf(" **************************\n");
printf("请输入需要运算的两个数x与y:\n");
for(i=1;c[i-1]!='\n';i++)
scanf("%c",&c[i]);
j=i-2;
for(i=1;d[i-1]!='\n';i++)
scanf("%c",&d[i]);
k=i-2;
t=max(j,k);
for(i=0;i<j;i++)
a[i]=c[j-i]-48;
for(i=0;i<k;i++)
b[i]=d[k-i]-48;
for(i=0;i<j;i++)
X[i]=a[i];
printf("请选择运算类型:\n");
printf(" 1:x+y; 2:x-y; 3:x*y; 4:x/y; 5:x%%y; 6:pow(x,y)\n");
scanf("%d",&x);
printf(" 运算结果为:\n");
switch(x)
{case 1:jia(a,b,j,k);break;
case 2:jian(a,b,j,k);break;
case 3:cheng(a,b,m,j,k,1);break;
case 4:chu(a,b,m,N,X,j,k,1);break;
case 5:mo(a,b,m,N,X,j,k);break;
case 6:chengfang(a,b,m,N,j,k);break;}
printf("**************************\n");
printf(" 信息安全 021098 郑洁 \n");
printf("**************************\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -