sdut oj 简单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[];
int i, j, k, c;
int t;
int n;
while(scanf("%d", &n)!=EOF)
{
if(n==)
{
printf("0! = 1\n\n");
continue;
}
if(n==)
{
printf("0! = 1\n1! = 1\n\n");
continue;
} printf("0! = 1\n1! = 1\n");
for(i=; i<=; i++)
{
r[i]=;
} r[]=j=;
for(i=; i<=n; i++)
{
for(k=; k<j; k++)
{
r[k]=r[k]*i;
}
for(k=c=; k<j; k++ )
{
t=r[k]+c;
r[k]=t%;
c=t/;
}
while(c)
{
r[j]=c%;
c=c/;
j++;
} //处理高位的那部分的进位问题
//printf("%d---\n", j) ;
printf("%d! = ", i );
for(k=j-; k>=; k--)
{
printf("%d", r[k] );
}
printf("\n");
}
printf("\n");
} return ;
} 除法的没涉及!有待添加 /**************************************
Problem id : SDUT OJ 2059
Result : Accepted
Take Memory : 496K
Take Time : 10MS
Submit Time : 2015-01-11 08:22:42
**************************************/

                                               HDU OJ    n!

Problem Description
Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!
Input
One N in one line, process to the end of file.
Output
For each N, output N! in one line.
Sample Input
1
2
3
Sample Output
1
2
6
 算法分析:和上一道题目一样也是 大数*小数的数组模拟!
 开二维数组太大开不出来,只好一维每次都要计算一遍。最好是打表存储好1到10000的阶乘数,直接输出就好了,但是10000的阶乘大约有57000位,需要开的内存太大!
 代码:

 #include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <algorithm>
#define mem(a) memset(a, 0, sizeof(a));
using namespace std;
int r[];
int pos[]; void jiecheng(int n)
{
int i, j, k, c, t;
mem(r);
r[]=j=;
for(i=; i<=n; i++)
{
for(k=; k<j; k++)
{
r[k]=r[k]*i; //上一行的数值进行 乘计算
} //逐位进行计算
for(k=c=; k<j; k++) //初始进位数为0
{
t=r[k]+c; //当前值+进位数
r[k]=t%; //取余即为该位数
c=t/; //进位数
}
while(c)
{
r[j]=c%;
c=c/;
j++;
}
}
for(i=j-; i>=; i--)
printf("%d", r[i]);
printf("\n");
} int main()
{
int n;
while(scanf("%d", &n)!=EOF)
{
if(n== ||n==)
{
printf("1\n");
continue;
}
else
{
jiecheng(n);
}
}
return ;
}

顺便提一下,如何计算一个数n的阶乘结果的位数,这是数学方法,不理解的话记住就好!

所谓n!的十进制位数,就是 log(n)+1, 根据数学公式有:n!=1*2*3*.....*n;

lg(n!)=lg(2)+......lg(n);

代码:

#include <string>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <cmath> using namespace std; int main()
{
long int n;
long int i;
double sum; while(scanf("%ld", &n)!=EOF)
{
sum=0.0;
for(i=; i<=n; i++)
{
sum+=log10(i);
}
printf("%ld\n", (int)sum+ );
}
return ;
}

阶乘问题(大数阶乘)简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 *【模板】 )的更多相关文章

  1. nyist28大数阶乘

    http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们 ...

  2. 大数阶乘(c语言)

    大数阶乘.代码比较简单. #include<stdio.h> #include<string.h> #define MAXN 25000 // 如果你的阶乘N比较大,建议大一点 ...

  3. 【大数阶乘】NYOJ-28

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  4. 大数阶乘 nyoj

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  5. 【ACM】大数阶乘 - Java BigInteger实现

    大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?   输入 输入一个整数 ...

  6. nyoj___大数阶乘

    http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 我们都知 ...

  7. HDU 1133 Buy the Ticket (数学、大数阶乘)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  8. 51nod1057—N的阶乘—(大数阶乘)

    1057 N的阶乘  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入N求N的阶乘的准确值.   Input 输入N(1 <= N <=  ...

  9. 大数阶乘(c++实现)

    #include <iostream>using namespace std;#define N 1000int BigNumFactorial(int Num[], int n);voi ...

  10. np问题(大数阶乘取模)

    转自 np问题 题目描述: LYK 喜欢研究一些比较困难的问题,比如 np 问题. 这次它又遇到一个棘手的 np 问题.问题是这个样子的:有两个数 n 和 p,求 n 的阶乘对 p 取模后的结果. L ...

随机推荐

  1. array的用法(关于动态选择值)

  2. hg下拉和上传代码

    1.从代码仓库克隆源代码:$ mkdir bzrobot_ws$ cd bzrobot_ws$ hg clone http://192.168.15.88/hg/bzrobot_src src$ ca ...

  3. UVA 111

    又被题意坑了... 输入的一串数字的含义是第i个数字是第a[i]个发生的.而不是编号为i的历史事件的实际发生顺序.所以第一步要做的是转换,将原始数据转换成编号为i的历史事件的实际发生顺序.然后按照实际 ...

  4. Spark学习(一) Spark初识

    一.官网介绍 1.什么是Spark 官网地址:http://spark.apache.org/ Apache Spark™是用于大规模数据处理的统一分析引擎. 从右侧最后一条新闻看,Spark也用于A ...

  5. Java 读写文件大全

    原文:http://www.open-open.com/code/view/1423281836529 java中多种方式读文件 一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内 ...

  6. Mecanim动画编辑器 - 加入动画层实现并行动作

    1.创建新的状态层 a) 通过下图的1button创建一个新的层   b) 通过下图2属性设置图层的权重.假设为0,则该图层的状态不会影响到总的状态机  c) Mask是设置动画的Avatar的关联节 ...

  7. 修改ubuntu系统时区

    ubuntu默认时区是Etc/UTC,和我们的北京时间相差8个时区,需要修改系统的时区,以下有两种简单方式修改系统时区: 1.修改/etc/timezone文件 vi /etc/timezone 把E ...

  8. JZ2440:时钟设置

    这一节的目标是对板子上的时钟有一个初步的了解.而且能通过初步设置.为我们接下来的程序做准备. 1. 板子上的基本资源: 板载晶振12M 主时钟源和 USB 时钟源都是晶振 2. 手冊中的相关项(按时钟 ...

  9. UVa567_Risk(最短路)(小白书图论专题)

    解题报告 option=com_onlinejudge&Itemid=8&category=7&page=show_problem&problem=508"& ...

  10. 【iOS】系统框架学习

    iOS的系统架构分为四个层次:核心操作系统层(Core OS layer).核心服务层(Core Services layer).媒体层(Media layer)和可触摸层(Cocoa Touch l ...