实现一个打印非负整数阶乘的函数

要求实现一个打印非负整数阶乘的函数。

void Print_Factorial ( const int N );

其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。

问题: 这个题目出现的问题主要是当N数字为最大值的时候计算不出来那么应该怎么办。
解法: 通过数组来保存结果的每一位。
具体解释: 题目计算的是阶乘。如N! =1×2×3×4×5…×n。

要点: 数组保存结果值
数组保存的是当前结果值,随着每一次的乘,数组值改变。

一个位置值代表数组中哪一位进行乘法运算。
乘法原理:当前值乘以一个值->数组(通过乘以数组中的每一位),如果大于十那么就要进位,留下个位数来覆盖此位置的数。

有一个结果值,一个进位值,一个覆盖值,一个位置值。
结果值 = 乘的结果+进位值
进位值 = 结果值 / 10
覆盖值(覆盖当前位置值) = 结果值 % 10
给出代码:

#include <stdio.h>
void Print_Factorial(int N){
	int a[3000];
	int temp,num,digit;           //temp:每一位的结果  num:进位   digit:结果的位数
	int i,j;
	a[0]=1;
	digit=1;                      //从第1位开始 
	if(N>=0) {
		for(int i = 2; i<=N; i++)
        {
            num = 0 ;
            for(int j = 0;j<digit; j++)
            {
                temp = a[j]*i+num;
                num = temp/10;
                a[j] = temp%10;
            }
            while(num)
            {
                a[digit] = num%10;
                num/=10;
                digit++;
            }
        }
		
		for(i=digit-1;i>=0;i--){
			printf("%d",a[i]);
		}
	}
	else printf("Invalid input");
} 

pta中的此题目
代码引用地

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值