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

简单n!

 

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

题目描述

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

输入

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

输出

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

示例输入

1
4

示例输出

0! = 1
1! = 1

0! = 1
1! = 1
2! = 2
3! = 6
4! = 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  
**************************************/

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。