阶乘问题(大数阶乘)简单 n! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 *【模板】 )
sdut oj 简单n!
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入
题目有多组数据,处理到文件结尾。输入一个数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!
#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! (一个大数与一个小数相乘的算法 、一个大数与一个小数的除法算法 *【模板】 )的更多相关文章
- nyist28大数阶乘
http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们 ...
- 大数阶乘(c语言)
大数阶乘.代码比较简单. #include<stdio.h> #include<string.h> #define MAXN 25000 // 如果你的阶乘N比较大,建议大一点 ...
- 【大数阶乘】NYOJ-28
大数阶乘 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数 ...
- 大数阶乘 nyoj
大数阶乘 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数 ...
- 【ACM】大数阶乘 - Java BigInteger实现
大数阶乘 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数 ...
- nyoj___大数阶乘
http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 我们都知 ...
- HDU 1133 Buy the Ticket (数学、大数阶乘)
Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- 51nod1057—N的阶乘—(大数阶乘)
1057 N的阶乘 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 输入N求N的阶乘的准确值. Input 输入N(1 <= N <= ...
- 大数阶乘(c++实现)
#include <iostream>using namespace std;#define N 1000int BigNumFactorial(int Num[], int n);voi ...
- np问题(大数阶乘取模)
转自 np问题 题目描述: LYK 喜欢研究一些比较困难的问题,比如 np 问题. 这次它又遇到一个棘手的 np 问题.问题是这个样子的:有两个数 n 和 p,求 n 的阶乘对 p 取模后的结果. L ...
随机推荐
- com.alibaba.fastjson和org.json遍历获取key
推荐都是用fastjson.org.json好像不支持序列化. com.alibaba.fastjson遍历获取key的方法: //fastjson解析方法 for (Map.Entry<Str ...
- asp.net 错误 类型"xxxxx"同时存在于"xxx.dll"和"xxxx.dll" 中
http://walttoney.blog.163.com/blog/static/127685797201051112839328/错误 类型“System.Web.UI.ScriptManager ...
- 【SPOJ687&POJ3693】Maximum repetition substring(后缀数组)
题意: n<=1e5 思路: From http://hzwer.com/6152.html 往后匹配多远 r 用ST表求lcp即可...往前 l 就把串反过来再做一下.. 但是有可能求出来的最 ...
- 再看c语言之getchar/putchar
- 全能无线渗透测试工具,一个LAZY就搞定了
近来一直在研究无线安全方面的东西,特别是在无线渗透测试这块,每次渗透测试时总要来回不停的切换操作和挑选利器,很是麻烦.就想看看是否可以有一款功能全面的集合型工具. 正所谓功夫不负有心人,还真有这么一个 ...
- SolidEdge如何修改线型和线宽
选中一条直线,然后点击如下所示两个按钮,可以分别修改线型和线宽.
- Js学习第十天----函数
函数 什么是函数?函数是由事件驱动的或者当他被调用时运行的可反复使用代码块.预计没明确,个人觉得函数就是能完毕一个功能的代码块. 看个案例: <!DOCTYPE html> <htm ...
- vue2.0 自定义过滤器(filter)实例
一.过滤器简介 (1)过滤器创建 过滤器的本质 是一个有参数 有返回值的方法 new Vue({ filters:{ myCurrency:function(myInput){ return 处理后的 ...
- Ubuntu下编译Android JNI实例全过程
第一步:保证make和gcc可用 在shell中输入make-v.不报错就是对的.(可參考http://wenku.baidu.com/view/d87586c24028915f804dc24a.ht ...
- java cup占用高分析脚本
[was@dmgr ita-scripts]$ vi java_analys.sh PID=$1 ; ps -mp $PID -o THREAD,tid,time | awk -F " ...