Chinaunix首页 | 论坛 | 博客
  • 博客访问: 332097
  • 博文数量: 45
  • 博客积分: 669
  • 博客等级: 上士
  • 技术积分: 675
  • 用 户 组: 普通用户
  • 注册时间: 2012-06-27 17:59
文章分类
文章存档

2015年(5)

2014年(6)

2013年(4)

2012年(30)

分类: C/C++

2014-07-18 21:26:01

当处理计算机内置数据类型无法处理的大数时,注意采用数组来进行运算。其中关键的地方在于处理运算过程中的进位运算。
以下为一个求大数阶乘的函数,存储于a[1000]中,每个元素存储4位数,可以借鉴用于处理一般的大数的运算。
int  factorial(int n)
{
long a[1000]; //存储大数
int i,j,m=0, c;
int width=0;


if(n==0) printf("%d",1);
    
a[0]=1; //
for(i=1;i<=n;i++)  //阶乘
{
c=0;
for(j=0;j<=m;j++) //将数组每一个元素里面存储的值进行阶乘
{
a[j]=a[j]*i+c;
c=a[j]/10000;  //获取超过10000的近位
a[j]=a[j]%10000; //保留未进位的数
}
if(c>0)  //有进位,向前进位。
{
m++;
a[m]=c;

}


printf("\n%ld",a[m]);
for(i=m-1;i>=0;i--) 
{
printf("%d",a[i]);
}
printf("\n");

width=4*m+log10((double)a[m])+1;
return width;
}

阅读(868) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~