⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.cpp

📁 能进行150位以内的大整数的加减乘除模乘方等运算
💻 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 + -