首页 > 学院 > 开发设计 > 正文

(函数题)4-10 阶乘计算升级版

2019-11-14 11:37:25
字体:
来源:转载
供稿:网友
4-10 阶乘计算升级版 

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

函数接口定义:

void PRint_Factorial ( const int N );

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

裁判测试程序样例:

#include <stdio.h>void Print_Factorial ( const int N );int main(){    int N;				    scanf("%d", &N);    Print_Factorial(N);    return 0;}/* 你的代码将被嵌在这里 */

输入样例:

15

输出样例:

1307674368000

void Print_Factorial ( const int N ){	if (N<0) printf("Invalid input");	else if(N==0) printf("1");	else { /*这个程序的算法是仿照摆竖式计算两书乘法的方法,乘数的每一位乘以被乘数,大于10则进位*/		int a[20000]={1};     /*由于这题比较变态,N最大为1000,所以只能采用数组来存储答案,且设定的数组长度非常长*/		int digit=1,carry=0;   /*digit为位数,carry为进位*/		int temp,i,j;		for (i=1;i<=N;i++) { 			for (j=0;j<digit;j++) {				temp=a[j]*i+carry;   /*temp为未进位前的数字*/ 				a[j]=temp%10;				carry=temp/10;				}			while(carry!=0) {				a[++digit-1]=carry%10; /*必须限制carry在[0,9]*/				carry=carry/10;				}	 		}  		for(i=digit-1;i>=0;i--)   /*按数组的逆序输出,即为答案*/ 			printf("%d",a[i]);	}} 


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表