c语言编程 大数运算,求大数运算C语言代码?

34abe409e8955fce9e17b3c5d5024273.png

#define MAX 400

void my_read(int *a)

{

int len,i,flag=0;

char s[MAX];

aa:

while(1)

{

scanf("%s",&s);

len=strlen(s);

if (s[0]=='-') flag=1;

for(i=len-flag;i>=1;i--)

{

if ((s[len-i]-'0')<0||(s[len-i]-'0')>9)

{

printf("\t\t\t你输入的第%d位不合法,按任意键重新输!!",len-i+1);

getch();

goto aa;

}

else

a[i]=s[len-i]-'0';

}

if (flag)

a[0]=-(len-1);

else

a[0]=len;

break;

}

return;

}

void my_print(int *a)

{

int i;

if (a[0]<0) printf("-");

if (a[0]==0)

{

printf("0");

return;

}

for(i=abs(a[0]);i>=1;i--)

printf("%d",a[i]);

printf("\n");

}

void format(int *a)

{

int p;

for(p=1;p=10;p++)

{

if (p>=a[0]) a[p+1]=0;

a[p+1]+=a[p]/10;

a[p]=a[p]%10;

}

if (p>=a[0]) a[0]=p;

return;

}

void add(int *a,int *b,int *c)

{

int len,i;

if (a[0]

else len=b[0];

for(i=1;i<=len;i++)

c[i]=a[i]+b[i];

if (len

{

for (;i<=a[0];i++)

c[i]=a[i];

c[0]=a[0];

}

else

{

for(;i<=b[0];i++)

{

c[i]=b[i];

}

c[0]=b[0];

}

format (c);

}

void commaltiply (int *a,int x,int *b)

{

int i;

for(i=1;i<=a[0];i++)

b[i]=a[i]*x;

b[0]=a[0];

format(b);

return;

}

void matiply(int *a,int *b,int *c)

{

int i,temp[MAX],j;

commaltiply(a,b[1],c);

for(i=2;i<=b[0];i++)

{

if (b[i]==0)

{

c[0]++;

for (j=c[0];j>1;j--)

c[1]=0;

}

else

{

commaltiply(a,b[i],temp);

for(j=1;j

commaltiply(temp,10,temp);

add(c,temp,c);

}

}

}

void dectobin(int *a,int *b)

{

int p;

b[0]=0;

while(a[0]>0)

{

b[0]++;

b[b[0]]=a[1]%2;

p=a[0];

while(p>0)

{

if (a[p]%2 && p>1) a[p-1]+=10;

a[p]/=2;

if (a[a[0]]==0) a[0]--;

p--;

}

}

}

format1(int *a)

{

int i;

for (i=1;i<=a[0];i++)

if (a[i]<0)

{ a[i]+=10;

a[i+1]-=1;

}

}

void sub_1(int *a,int *b,int *c)

{

int i;

for (i=1;i<=b[0];i++)

c[i]=a[i]-b[i];

if (a[0]==b[0]) goto loop;

for (;i<=a[0];i++)

c[i]=a[i];

loop:

c[0]=a[0];

format1(c);

i=c[0];

while(1)

if (c[i]==0) i--;

else break;

c[0]=i;

return;

}

void sub(int *a,int *b,int *c)

{

int i,flag=0;

for (i=1;i<=a[0];i++)

if (a[i]!=b[i]) {flag=1;break;}

if (flag==0)

{

c[0]=0;

return;

}

flag=0;

if (a[0]==b[0])

{

i=a[0];

while(i>0)

{

if (a[i]>b[i])

{

sub_1(a,b,c);

break;

}

if (a[i]

{

flag=1;

sub_1(b,a,c);

break;

}

i--;

}

}

if (a[0]>b[0])

sub_1(a,b,c);

else

if (a[0]

{

flag=1;

sub_1(b,a,c);

}

if (flag)

c[0]=-c[0];

else

c[0]=c[0];

}

void main()

{

int i,a[MAX],b[MAX],c[MAX];

char yn;

strat:

while(1)

{

clrscr();

printf("\n\n\n");

printf("\t\t\t**************************************\n");

printf("\t\t\t* *\n");

printf("\t\t\t* 1.大整数的加法 *\n");

printf("\t\t\t* 2.大整数的减法 *\n");

printf("\t\t\t* 3.大整数的乘法 *\n");

printf("\t\t\t* 4.大整数进制转换 *\n");

printf("\t\t\t* 5.帮助 ?*\n");

printf("\t\t\t* 6.退出 *\n");

printf("\t\t\t* *\n");

printf("\t\t\t**************************************\n");

printf("\n\n\t\t\t 请选择(1-6):");

yn=getch();

if (yn=='1'||yn=='2'||yn=='3'||yn=='4'||yn=='5'||yn=='6') break;

else

{

printf("\n\t\t\t 输入不合法!按任意键重新输入!!!!"); getch();

}

}

clrscr();

if (yn=='6') return;

if (yn=='4')

{

printf("请输入待转换的大整数:");

printf("\n");

my_read(a);

for (i=1;i<=abs(a[0]);i++)

b[i]=a[i];

b[0]=a[0];

if (a[0]<0) {a[0]=-a[0];dectobin(a,c);a[0]=-a[0];c[0]=-c[0];goto e;}

dectobin(a,c);

e:

printf("十进制:");

my_print(b);

printf("二进制:");

my_print(c);

goto loop;

}

printf("请输入大整数A:");

my_read(a);

printf("请输入大整数B:");

my_read(b);

if (yn=='1')

{

if (a[0]<0 && b[0]<0) {a[0]=-a[0];b[0]=-b[0];add(a,b,c);c[0]=-c[0];a[0]=-a[0];b[0]=-b[0];goto c;}

if (a[0]>0 && b[0]<0) {b[0]=-b[0];sub(a,b,c);b[0]=-b[0];goto c;}

if (a[0]>0 && b[0]>0) {add(a,b,c);goto c;}

if (a[0]<0 && b[0]>0) {a[0]=-a[0];sub(b,a,c);a[0]=-a[0];goto c;}

c:

printf("\n\t\t\t");

printf("A=");

my_print(a);

printf("\n\t\t\t");

printf("B=");

my_print(b);

printf("\n\t\t\t");

printf("C=A+B=");

my_print(c);

goto loop;

}

if (yn=='2')

{

if (a[0]<0 && b[0]<0) {a[0]=-a[0];b[0]=-b[0];sub(b,a,c);a[0]=-a[0];b[0]=-b[0];}

if (a[0]<0 && b[0]>0) {a[0]=-a[0];add(a,b,c);a[0]=-a[0];c[0]=-c[0];}

if (a[0]>0 && b[0]<0) {b[0]=-b[0];add(a,b,c);b[0]=-b[0];}

if (a[0]>0 && b[0]>0) sub(a,b,c);

printf("A=");

my_print(a);

printf("\nB=");

my_print(b);

printf("\nC=A-B=");

my_print(c);

goto loop;

}

if (yn=='3')

{

if (a[0]<0 && b[0]>0) {a[0]=-a[0];matiply(a,b,c);a[0]=-a[0];c[0]=-c[0];goto d;}

if (a[0]>0 && b[0]<0) {b[0]=-b[0];matiply(a,b,c);b[0]=-b[0];c[0]=-c[0];goto d;}

if (a[0]<0 && b[0]<0) {a[0]=-a[0];b[0]=-b[0];matiply(a,b,c);a[0]=-a[0];b[0]=-b[0];goto d;}

matiply(a,b,c);

d:

printf("\n\t\t\tA=");

my_print(a);

printf("\n\t\t\tB=");

my_print(b);

printf("\n\t\t\tC=A*B=");

my_print(c);

goto loop;

}

loop:

while(1)

{

printf("\n\t\t\t继续计算吗?(y/n)");

yn=getch();

if (yn=='y') goto strat;

if (yn=='n') return;

}

}

◆◆

评论读取中....

请登录后再发表评论!

◆◆

修改失败,请稍后尝试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值