1.高精度整数_阶乘求解
编写程序,实现对任意一个高精度整数进行阶乘求解。
C代码如下:
第一种方法:构造bigInteger结构体的方式来实现
//高精度阶乘
#include<stdio.h>
#include<string.h>
struct bigInteger{
int digit[10000];
int size;
void init(){//初始化
for(int i=0;i<10000;i++) digit[i]=0;
size=0;}
void set(int x) //用一个小整数设置高精度整数
{
init();
do{ //对小整数4位为一个单位分解依次存入digit当中
digit[size++]=x%10000;
x/=10000;
}while(x!=0);
}
void output(){ //输出
for(int i=size-1;i>=0;i--){
if(i!=size-1) printf("%04d",digit[i]);
else printf("%d",digit[i]);}
printf("\n");
}
bigInteger operator * (int x) const{ //乘法运算符
bigInteger ret; //将要返回的高精度整数
ret.init(); //初始化
int carry=0; //进位初始值为0
for(int i=0;i<size;i++){
int tmp=x*digit[i]+carry; //用小整数x乘以当前位数字并加上来自低位的进位
carry=tmp/10000; //计算进位
tmp%=10000; //去除进位部分
ret.digit[ret.size++]=tmp; //保存该位数字
}
if(carry!=0){ //若最高位有进位
ret.digit[ret.size++]=carry; //保存该进位
}
return ret; //返回结果
}
}a;
int main()
{
int n;
while(scanf("%d",&n)!=EOF){
a.init();
a.set(1);
for(int i=1;i<=n;i++)
{
a=a*i;
}
a.output();
}
return 0;
}
结果显示:
2.简洁版:采取进位的方式来计算高精度整数阶乘
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 4000
int main() {
int n,a[MAX],i,j,s,r=0;
scanf("%d",&n);
memset(a,0,sizeof(a));
a[0]=1;
for(i=2;i<=n;i++){
for(j=0;j<MAX;j++){
s=a[j]*i+r;
r=s/10;//进位
a[j]=s%10;
}
}
for(i=MAX-1;i>=0;i--){
if(a[i])
break;
}
for(j=i;j>=0;j--)//倒序输出
printf("%d",a[j]);
return 0;
}