高精度数计算

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

C语言课程设计-高精度数计算

源代码:

#include

#include

#include

int main()

{

int a,b;

int c;

int i;

int *Numa,*Numb,*Sum;

printf("请输入第一个加数的位数(小于1000位),加数由系统随机生成:");

scanf("%d",&a);

printf("请输入第二个加数的位数(小于1000位),加数由系统随机生成:");

scanf("%d",&b);

Numa=(int *)malloc(a*sizeof(int));

Numb=(int *)malloc(b*sizeof(int));

srand( (unsigned)time( NULL ) );//产生随机种子

//随机产生加数a

for(i=0;i

{

Numa[i]=rand()%10;//取余数运算,保证每个产生的随机数在10以内}

while(!Numa[0])//避免最高位是0

{

Numa[0]=rand()%10;

}

//随机产生加数b

for(i=0;i

{

Numb[i]=rand()%10;//取余数运算,保证每个产生的随机数在10以内}

while(!Numb[0])//避免最高位是0

{

Numb[0]=rand()%10;

}

printf("随机产生的加数a为:\n");

for(i=0;i

{

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

}

printf("\n");

printf("随机产生的加数b为:\n");

for(i=0;i

{

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

}

printf("\n");

int tag;//进位标志位

if(a>=b)//加数a大

{

c=a;

Sum=(int *)malloc((c+1)*sizeof(int));

tag=0;

for(i=0;i

{

if(tag==0)//无进位

{

Sum[c-i]=Numa[a-i-1]+Numb[b-i-1];

if(Sum[c-i]>=10)//如果和大于10

{

Sum[c-i]=Sum[c-i]-10;

tag=1;//标志进位

}

else

{

tag=0;

}

}

else//有进位

{

Sum[c-i]=Numa[a-i-1]+Numb[b-i-1]+1;

if(Sum[c-i]>=10)//如果和大于10

{

Sum[c-i]=Sum[c-i]-10;

tag=1;//标志进位

}

else

{

tag=0;

}

}

}

//按位加完后,最后可能产生进位,要处理一下for(;c-i-1>=0;i++)

{

if(tag==1)

{

Sum[c-i]=Numa[a-i-1]+1;

if(Sum[c-i-1]>=10)

{

Sum[c-i]-=10;

tag=1;

}

else

{

tag=0;

}

}

else

{

Sum[c-i]=Numa[a-i-1];

if(Sum[c-i]>=10)

{

Sum[c-i]-=10;

tag=1;

}

else

{

tag=0;

}

}

}

//最后加完后,如果还有进位还要加上进位

if(tag==1)

{

Sum[0]=1;

printf("\n");

printf("两个数的和为:\n");

for(i=0;i<=c;i++)

{

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

}

}

else

{

printf("\n");

printf("两个数的和为:\n");

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

{

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

}

}

printf("\n");

}

else

{

c=b;

Sum=(int *)malloc((c+1)*sizeof(int));

tag=0;

for(i=0;i

{

if(tag==0)//无进位

{

Sum[c-i]=Numa[a-i-1]+Numb[b-i-1];

if(Sum[c-i]>=10)//如果和大于10

{

Sum[c-i]=Sum[c-i]-10;

tag=1;//标志进位

}

else

{

tag=0;

}

}

else//有进位

{

Sum[c-i]=Numa[a-i-1]+Numb[b-i-1]+1;

if(Sum[c-i]>=10)//如果和大于10

{

Sum[c-i]=Sum[c-i]-10;

tag=1;//标志进位

}

else

{

tag=0;

}

}

相关文档
最新文档