题目有多组数据,处理到文件结尾。输入一个数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
**************************************/
sdut oj 2059 简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 【模板】 )
原文:http://www.cnblogs.com/yspworld/p/4231652.html