当前位置:文档之家› 高精度数计算

高精度数计算

C语言课程设计-高精度数计算
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
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<a;i++)
{
Numa[i]=rand()%10;//取余数运算,保证每个产生的随机数在10以内}
while(!Numa[0])//避免最高位是0
{
Numa[0]=rand()%10;
}
//随机产生加数b
for(i=0;i<b;i++)
{
Numb[i]=rand()%10;//取余数运算,保证每个产生的随机数在10以内}
while(!Numb[0])//避免最高位是0
{
Numb[0]=rand()%10;
}
printf("随机产生的加数a为:\n");
for(i=0;i<a;i++)
{
printf("%d",Numa[i]);
}
printf("\n");
printf("随机产生的加数b为:\n");
for(i=0;i<b;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<b;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<a;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]=Numb[b-i-1]+1;
if(Sum[c-i-1]>=10)
{
Sum[c-i]-=10;
tag=1;
}
else
{
tag=0;
}
}
else
{
Sum[c-i]=Numb[b-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");
}
return 0;
}。

相关主题