C语言大数阶乘
发布时间:2020-12-14 02:46:08 所属栏目:大数据 来源:网络整理
导读:C语言大数阶乘的思路: 1、设置一个整型数组表示最终的结果,整型数组的每一个元素表示结果的每一位,因此,每一个元素不超过9。 2、初始化整型数组为1,有效长度为1,将k=1,2,3,...,n乘到数组中,乘的时候将k与数组的每一个有效元素相乘,如果结果大于9,要
C语言大数阶乘的思路:
1、设置一个整型数组表示最终的结果,整型数组的每一个元素表示结果的每一位,因此,每一个元素不超过9。 2、初始化整型数组为1,有效长度为1,将k=1,2,3,...,n乘到数组中,乘的时候将k与数组的每一个有效元素相乘,如果结果大于9,要处理进位。3、如果乘完之后进位carry仍然不为0,说明最高位有进位,有效长度要增加。 代码如下: #include <stdio.h> #include <string.h> #include <stdlib.h> /*大数阶乘,主要思想: 定义一个整型数组用来存放结果,数组每一元素表示结果的每一位,定义len变量表示整型数组 的有效位数。每乘以一个数处理一次进位carry,跟大数相乘差不多。 */ int main(){ int num,i,j,carry; int res[100000]; //结果最多有100000位。 int len; //数组的有效位数。 scanf("%d",&num); memset(res,sizeof(res)); res[0] = 1; //结果数组初始化为1,有效长度为1. len = 1; for(i=1;i<=num;i++){ //用从1到num的数乘以结果数组 carry = 0; for(j=0;j<len;j++){ res[j] = res[j]*i+carry; if(res[j]>=10){ //处理进位 carry = res[j]/10; res[j] = res[j]%10; }else{ carry = 0; } } while(carry>0){ //最高位仍然有进位 res[len] = carry%10; carry = carry/10; len++; } } for(i=len-1;i>=0;i--){ printf("%d",res[i]); } printf("n"); return EXIT_SUCCESS; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |