首页 > 编程知识 正文

阶乘如何计算(大数运算:蓝桥基础第30题(阶乘计算))

时间:2023-05-05 04:26:57 阅读:123290 作者:2884

大数运算方法的数据过大时,一般的数据类型无法存储。 在这种情况下,使用数组存储数据、模拟手动计算和按位计算的大数运算的专业方法。

例如,1234*4以int序列a存储

步骤1 :将1:1000位分别存入a[0]、a[1]、a[2]、a[3]。 此时,a={4、3、2、1};

第二步:从位数乘以4。 请注意进位运算。

(1)4=16,位6存储在a(0)中,记录进位1。 在这种情况下,a={ 6,3,2,1 };

)2)3 * 4=12,加上进位1为13,1个位3保存在a(1)中,记录进位1。 在这种情况下,a={ 6,3,2,1 };

)3)2 * 4=8,加上进位9,存储在a(2)中。 在这种情况下,a={ 6,3,9,1 };

(4)1 * 4=4,委托给a(3)。 在这种情况下,a={6、3、9、4};

步骤3 :输出,从最后一位开始输出,需要4936。

主题:问题说明

输入正整数n,输出n! 请参阅。

其中n!=123*…*n。

算法说明

n! 虽然可能很大,但计算机可以表示的整数范围有限,需要使用高精度的计算方法。 使用数组a表示大整数a,A[0]表示a的一位,A[1]表示a的十位,按顺序类推。

如果a乘以整数k,则数组a的各个元素乘以k。 请注意适当的进位。

首先a为1,然后乘以2、3,乘n的时候,得到了n! 请参阅。

输入格式

输入正整数n。 n=1000。

输出格式

输出n! 的准确值。

样本输入

10

样本输出

3628800

上码` ` ` CPP # include iostream # include string.husingnamespacestd; int main () {int num; 记录cin num的int a[10010]; 短信(a,0,sizeof(a ) a ); //清零,如果不加入该步骤,输出时错误int carry=0; //进位int s; a[0]=1; //1到num for (inti=2; i=num; I ) for(intj=0; j 10000; j () {s=a[j] * i carry; a[j]=s % 10; 卡莉=s/10; }for(intI=10000; i=0; (I ) ) /反向输出if ) a[I]!=0) while(I=0) ) {cout a[i]; I----; }break; } }返回0; }也可以更改为在一个数组位中存储4、5位或更多位。 少于int限制)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。