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; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。