大数运算 C语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

大数加法:

#include
#include
void main()
{
int f;
int i,an,bn,k;
char a[1000],b[1000];
int af[1000]={0},bf[1000]={0},c[1000]; //原来这样赋值,af和bf就全是0了。。我纠结了许久。
while(scanf("%s%s",a,b)!=EOF)
{
an=strlen(a);
bn=strlen(b);
k=an>bn?an:bn;
c[0]=0;
f=0;
for(i=0;iaf[i]=a[an-i-1]-'0';
for(i=0;ibf[i]=b[bn-i-1]-'0';

for(i=0;i{
c[i]+=(af[i]+bf[i])%10; //这就是模拟手写竖式运算了……af bf分别是a b的倒置,这样a b之和c也是倒置的
c[i+1]=(af[i]+bf[i])/10;
}
if(c[i]!=0) k++; //为什么k要加1呢。因为如果进位,长度比a b最长的多1。如果不+1,最左边的1会不输出

for(i=k-1;i>=0;i--) //其实我可以不写上面的判断直接写for(i=k;i>=0;i--),因为我有f
{
if(c[i]) //f的目的是不输出多余的0
f=1;
if(f || i==0)
printf("%d",c[i]);
}
printf("\n");
for(i=0;iaf[i]=bf[i]=0;
}
}





大数减法:(修复了一个重大BUG)

#include
#include
int compare(char *a,char *b)
{
int an,bn;
an=strlen(a);
bn=strlen(b);
if(strcmp(a,b)==0)
return 0;
if(an>bn)
return 1;
else if(an==bn)
return strcmp(a,b);
else
return -1;
}
void main()
{
int f,n;
int i,an,bn,k;
char a[1000],b[1000];
int af[1000]={0},bf[1000]={0},c[1000];
while(scanf("%s%s",a,b)!=EOF)
{
an=strlen(a);
bn=strlen(b);
k=an>bn?an:bn;
c[0]=0;
f=0;
n=compare(a,b);
for(i=0;iaf[i]=a[an-i-1]-'0';
for(i=0;ibf[i]=b[bn-i-1]-'0';

for(i=0;i{
if(n>=0)
{
if(af[i]>=bf[i])
c[i]=af[i]-bf[i];
else
c[i]=af[i]-bf[i]+10,af[i+1]--;
}
else
{
if(bf[i]>=af[i])
c[i]=bf[i]-af[i];
else
c[i]=bf[i]-af[i]+10,bf[i+1]--;
}
}
if(n<0)
printf("-");
for(i=k-1;i>=0;i--)
{
if(c[i])
f=1;
if(f || i==0)
printf("%d",c[i]);
}
printf("\n");
for(i=0;iaf[i]=bf[i]=0;
}
}



尼玛啊!!!乘法的我十分钟就写好了!!!修改了好几个小时啊!!!

大数乘法:

#include
#include
void main()
{
int f;
int i,j,an,bn,k,d;
char a[1000],b[1000];
int af[1000]={0},bf[1000]={0},c[1000]={0};
while(scanf("%s%s",a,b)!=EOF)
{
an=strlen(a);
bn=strlen(b);
k=an>bn?an:bn;
c[0]=0;
f=0;
for(i=0;iaf[i]=a[an-i-1]-'0';
for(i=0;ibf[i]=b[bn-i-1]-'0';

for(j=0;j{
for(i=0;i{
d=c[i+j];
c[i+j]=(d+bf[j]*af[i])%10;
c[i+1+j]+=(d+bf[j]*af[i])/10;
}
}
for(i=an+bn;i>=0;i--)
{
if(c[i])
f=1;
if(f || i==0)
printf("%d",c[i]);
}
printf("\n");
for(i=0;i<2*k;i++)

c[i]=af[i]=bf[i]=0;
}
}

大数除法:(试除法,不太完美)

#include
#include
int compare(char *a,char *b)
{
int i,an,bn,fa=0,fb=0;
an=strlen(a);
bn=strlen(b);
for(i=0;i{
if(a[i]=='0' && i!=an-1)
fa++;
else
break;
}
for(i=0;ia[i]=a[i+fa];
a[an-fa]='\0';
for(i=0;i{
if(b[i]=='0' && i!=bn-1)
fb++;
else
break;
}
for(i=0;ib[i]=b[i+fb];
b[bn-fb]='\0';

an=strlen(a);
bn=strlen(b);
if(strcmp(a,b)==0)
return 0;
if(an>bn)
return 1;
else if(an==bn)
return strcmp(a,b);
else
return -1;
}
void cop(char *a,int n,char *c)
{
int i;
memset(c,0,sizeof(c));
for(i=0;ic[i]=a[i];
}
void cheng(char *a,int n,char *r)
{
int f;
int i,j,an;
int af[1000]={0};
int c[1000]={0};
memset(r,0,sizeof(r));
an=strlen(a);
f=0;
for(i=0;iaf[i]=a[an-i-1]-'0';
for(i=0;i{
c[i]+=(n*af[i])%10;
c[i+1]=(n*af[i])/10;
}
for(i=an,j=0;i>=0;i--)
{
if(c[i])
f=1;
if(f || i==0)
r[j++]=c[i]+'0';
}
r[j]='\0';
for(i=0;i<=an;i++)
c[i]=af[i]=0;
}
void jian(char *a,char *b,char *r)
{
int f,n;
int i,j,an,bn,k;
int af[1000]={0},bf[1000]={0},c[1000];
an=strlen(a);
bn=strlen(b);
k=an>bn?an:bn;
c[0]=0;
f=0;
n=compare(a,b);
for(i=0;iaf[i]=a[an-i-1]-'0';
for(i=0;ibf[i]=b[bn-i-1]-'0';

for(i=0;i{
if(n>=0)
{
if(af[i]>=bf[i])
c[i]=af[i]-bf[i];
else
c[i]=af[i]-bf[i]+10,af[i+1]--;
}
else
{
if(bf[i]>=af[i])
c[i]=bf[i]-af[i];
else
c[i]=bf[i]-af[i]+10,bf[i+1]--;
}
}
for(i=k-1,j=0;i>=0;i--)
{
if(c[i])
f=1;
if(f || i==0)
r[j++]=c[i]+'0';
}
for(i=j;i<1000;i++)
r[i]='\0';

}
void main()
{
void jian(char *a,char *b,char *r);
char a[1000],b[1000];
int c[1000]={0};
char r1[1000],r2[1000];
char p[1000]={0},f[10];
int i,j,an,bn,q,n;
while(scanf("%s %s",a,b)!=EOF)
{
an=strlen(a);
bn=strlen(b);
q=0;f[0]='0';
if(an>=bn)
{
cop(a,bn,p);
for(j=0;j{
for(i=0;;i++)
{
cheng(b,i,r1);
cheng(b,i+1,r2);
compare(r1,p);

if(compare(r2,p)>0)
break;
}
jian(p,r1,p);
n=strlen(p);
//printf("jiu ");puts(p);
p[n]=a[bn+j];
// printf("xin ");puts(p);


c[j]=i;
}
if(c[0]!=0 || c[1]==0)
printf("%d",c[0]);
for(j=1;jprintf("%d",c[j]);
printf(".");
for(j=0;j<10;j++)
{
for(i=0;;i++)
{
cheng(b,i,r1);
cheng(b,i+1,r2);
if(compare(r2,p)>0)
break;
}
jian(p,r1,p);
n=strlen(p);
p[n]='0';
c[j]=i;
}
for(j=1;j<10;j++)
printf("%d",c[j]);
c[1]=0;
printf("\n");
}
else
{
for(i=an,j=0;j<10;i++,j++)
a[i]='0';
cop(a,bn,p);
printf("0.");

for(j=0;j<10;j++)


{
for(i=0;;i++)
{
cheng(b,i,r1);
cheng(b,i+1,r2);
if(compare(r2,p)>0)
break;
}
jian(p,r1,p);
p[bn]='0';
c[j]=i;

printf("%d",c[j]);
}
c[1]=0;
printf("\n");
}
}
}

相关文档
最新文档