C语言的高精度算法与程序
答案:4 悬赏:10 手机版
解决时间 2021-07-18 01:44
- 提问者网友:雾里闻花香
- 2021-07-17 02:34
本人需要高精度加、减、乘法的函数的程序,不是什么用doubt、float类型解决问题!是要用数组的那种!因为本人需要编的程序中必须使用到doubt以外的数据。每个运算法则写一个函数,函数的定义类型为viod ,所加(减或乘)的两个数的数位放在连个数组a[]、b[]中,长度为len1、len2,和(差或积)放在数组c[]中,长度为len3。
最佳答案
- 五星知识达人网友:玩世
- 2021-07-17 02:49
。。
高精度加法:
#include <stdio.h>
main()
{ int a[240]={0},b[240]={0},c[241]={0};
int i,ka,kb,k;
char a1[240],b1[240];
gets(a1);ka=strlen(a1);
gets(b1);kb=strlen(b1);
if(ka>=kb) k=ka;
else k=kb;
for(i=0;i<ka;i++) a[i]=a1[ka-i-1]-'0';
for(i=0;i<kb;i++) b[i]=b1[kb-i-1]-'0';
for(i=0;i<k;i++)
{c[i]=a[i]+b[i]+c[i];
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
if(c[k]) k++;
for(i=k-1;i>=0;i--) printf("%d",c[i]);
system("pause");
}
高精度减法。。
#include <stdio.h>
main()
{ int a[240]={0},b[240]={0};
int i,la,lb;
char a1[240],b1[240];
gets(a1);la=strlen(a1);
gets(b1);lb=strlen(b1);
for(i=0;i<la;i++) a[i]=a1[la-i-1]-'0';
for(i=0;i<lb;i++) b[i]=b1[lb-i-1]-'0';
if(la>lb)
{for(i=0;i<la;i++)
{if(a[i]<b[i])
{a[i+1]--;
a[i]+=10;
}
a[i]=a[i]-b[i];
}
while(!a[la-1])
{la--;
if(!la) {printf("0"); break;}
}
for(i=la-1;i>=0;i--) printf("%d",a[i]);
}
else
{for(i=0;i<lb;i++)
{if(b[i]<a[i])
{b[i+1]--;
b[i]+=10;
}
b[i]=b[i]-a[i];
}
while(!b[lb-1])
{lb--;
if(!lb) {printf("0"); break;}
}
printf("-");
for(i=lb-1;i>=0;i--) printf("%d",b[i]);
}
system("pause");
}
高精度乘法:
#include<stdio.h>
#include<string.h>
int a[2505],b[2505],x[5010]={0};
main()
{ int i,j,k,lena,lenb,t;
char temp[10010];
scanf("%s",temp);
lena=strlen(temp);
if(lena%4)
{ t=4-lena%4;
for(i=t+lena-1;i>=t;i--) temp[i]=temp[i-t];
temp[t+lena]='\0';
lena+=t;
for(i=0;i<t;i++) temp[i]='0';
}
for(i=0,j=1;i<lena;i+=4,j++)
a[j]=(temp[i]-'0')*1000+(temp[i+1]-'0')*100+(temp[i+2]-'0')*10+temp[i+3]-'0';
lena=j;
scanf("%s",temp);
lenb=strlen(temp);
if(lenb%4)
{
t=4-lenb%4;
for(i=t+lenb-1;i>=t;i--) temp[i]=temp[i-t];
temp[t+lenb]='\0';
lenb+=t;
for(i=0;i<t;i++) temp[i]='0';
}
for(i=0,j=1;i<lenb;i+=4,j++)
b[j]=(temp[i]-'0')*1000+(temp[i+1]-'0')*100+(temp[i+2]-'0')*10+temp[i+3]-'0';
lenb=j;
for(i=lena-1;i>0;i--)
for(j=lenb-1;j>0;j--)
{
t=i+j;
x[t]+=a[i]*b[j];
x[t-1]+=x[i+j]/10000;
x[t]=x[t]%10000;
}
while(!x[i]) i++;
printf("%d",x[i]);
i++; for(;i<lena+lenb-1;i++)
if(x[i]>1000) printf("%d",x[i]);
else
if(x[i]>100) printf("0%d",x[i]);
else
if(x[i]>10) printf("00%d",x[i]);
else printf("000%d",x[i]);
system("pause");
}
。。
高精度加法:
#include <stdio.h>
main()
{ int a[240]={0},b[240]={0},c[241]={0};
int i,ka,kb,k;
char a1[240],b1[240];
gets(a1);ka=strlen(a1);
gets(b1);kb=strlen(b1);
if(ka>=kb) k=ka;
else k=kb;
for(i=0;i<ka;i++) a[i]=a1[ka-i-1]-'0';
for(i=0;i<kb;i++) b[i]=b1[kb-i-1]-'0';
for(i=0;i<k;i++)
{c[i]=a[i]+b[i]+c[i];
c[i+1]=c[i+1]+c[i]/10;
c[i]=c[i]%10;
}
if(c[k]) k++;
for(i=k-1;i>=0;i--) printf("%d",c[i]);
system("pause");
}
高精度减法。。
#include <stdio.h>
main()
{ int a[240]={0},b[240]={0};
int i,la,lb;
char a1[240],b1[240];
gets(a1);la=strlen(a1);
gets(b1);lb=strlen(b1);
for(i=0;i<la;i++) a[i]=a1[la-i-1]-'0';
for(i=0;i<lb;i++) b[i]=b1[lb-i-1]-'0';
if(la>lb)
{for(i=0;i<la;i++)
{if(a[i]<b[i])
{a[i+1]--;
a[i]+=10;
}
a[i]=a[i]-b[i];
}
while(!a[la-1])
{la--;
if(!la) {printf("0"); break;}
}
for(i=la-1;i>=0;i--) printf("%d",a[i]);
}
else
{for(i=0;i<lb;i++)
{if(b[i]<a[i])
{b[i+1]--;
b[i]+=10;
}
b[i]=b[i]-a[i];
}
while(!b[lb-1])
{lb--;
if(!lb) {printf("0"); break;}
}
printf("-");
for(i=lb-1;i>=0;i--) printf("%d",b[i]);
}
system("pause");
}
高精度乘法:
#include<stdio.h>
#include<string.h>
int a[2505],b[2505],x[5010]={0};
main()
{ int i,j,k,lena,lenb,t;
char temp[10010];
scanf("%s",temp);
lena=strlen(temp);
if(lena%4)
{ t=4-lena%4;
for(i=t+lena-1;i>=t;i--) temp[i]=temp[i-t];
temp[t+lena]='\0';
lena+=t;
for(i=0;i<t;i++) temp[i]='0';
}
for(i=0,j=1;i<lena;i+=4,j++)
a[j]=(temp[i]-'0')*1000+(temp[i+1]-'0')*100+(temp[i+2]-'0')*10+temp[i+3]-'0';
lena=j;
scanf("%s",temp);
lenb=strlen(temp);
if(lenb%4)
{
t=4-lenb%4;
for(i=t+lenb-1;i>=t;i--) temp[i]=temp[i-t];
temp[t+lenb]='\0';
lenb+=t;
for(i=0;i<t;i++) temp[i]='0';
}
for(i=0,j=1;i<lenb;i+=4,j++)
b[j]=(temp[i]-'0')*1000+(temp[i+1]-'0')*100+(temp[i+2]-'0')*10+temp[i+3]-'0';
lenb=j;
for(i=lena-1;i>0;i--)
for(j=lenb-1;j>0;j--)
{
t=i+j;
x[t]+=a[i]*b[j];
x[t-1]+=x[i+j]/10000;
x[t]=x[t]%10000;
}
while(!x[i]) i++;
printf("%d",x[i]);
i++; for(;i<lena+lenb-1;i++)
if(x[i]>1000) printf("%d",x[i]);
else
if(x[i]>100) printf("0%d",x[i]);
else
if(x[i]>10) printf("00%d",x[i]);
else printf("000%d",x[i]);
system("pause");
}
。。
全部回答
- 1楼网友:轮獄道
- 2021-07-17 06:06
麻烦上楼的 请你解释哈 那个高精度数相乘的那个程序了 怎么有点看不懂了 尤其是这部分了if(lena%4)
{ t=4-lena%4;
for(i=t+lena-1;i>=t;i--) temp[i]=temp[i-t];
temp[t+lena]='\0';
lena+=t;
for(i=0;i<t;i++) temp[i]='0';
}请你解释哈 谢谢你 了!!
- 2楼网友:举杯邀酒敬孤独
- 2021-07-17 05:15
#include <stdio.h>
void main()
{
int i,a,n,sum=0,k=1;
scanf("%d %d",&a,&n);
for(i=n;i>=1;i--)
{
sum+=a*i*k;
k=k*10;
}
printf("sum is :%d\n",sum);
}
- 3楼网友:何以畏孤独
- 2021-07-17 03:57
我有个超级大数运算代码
不知道你用的上不?如果要我在找来发给你
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯