首页 > 代码库 > sdut oj 2059 简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 【模板】 )

sdut oj 2059 简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 【模板】 )

简单n!

 

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

给定一个数n(0 <= n <= 150), 求0到n中所有数的阶乘。

输入

题目有多组数据,处理到文件结尾。输入一个数n。

输出

输出阶乘,形式如:4! = 24.每组数据输出后跟一个空行。

示例输入

14

示例输出

0! = 11! = 10! = 11! = 12! = 23! = 64! = 24

提示

 代码:
       
#include <stdio.h>#include <string.h>#include <stdlib.h>#include <algorithm>#include <iostream>#include <iomanip>#include <cctype>#include <string>using namespace std;//实现1->150的阶乘int main(){    int r[601];	int i, j, k, c;	int t;    int n;	while(scanf("%d", &n)!=EOF)	{		if(n==0)		{			printf("0! = 1\n\n");			continue;		}		if(n==1)		{			printf("0! = 1\n1! = 1\n\n");			continue;		}        printf("0! = 1\n1! = 1\n");		for(i=0; i<=600; i++)		{		    r[i]=0;		}        	    r[0]=j=1;	    for(i=2; i<=n; i++)		{		    for(k=0; k<j; k++)			{			    r[k]=r[k]*i;			}		    for(k=c=0; k<j; k++ )			{			    t=r[k]+c;			    r[k]=t%10;			    c=t/10;			}		    while(c)			{			    r[j]=c%10;			    c=c/10;			    j++;			} //处理高位的那部分的进位问题		//printf("%d---\n", j) ;            printf("%d! = ", i );		    for(k=j-1; k>=0; k--)			{			    printf("%d", r[k] );			}		    printf("\n");		}		printf("\n");	}   	return 0;} 除法的没涉及!有待添加/**************************************	Problem id	: SDUT OJ 2059 	Result		: Accepted 	Take Memory	: 496K 	Take Time	: 10MS 	Submit Time	: 2015-01-11 08:22:42  **************************************/

 

sdut oj 2059 简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 【模板】 )