看似很简单的一道题 (openjudge 1.4 16题)

来源:互联网 发布:淘宝客服绩效考核工具 编辑:程序博客网 时间:2024/06/10 21:14

描述

求10000以内n的阶乘。

输入
只有一行输入,整数n(0<=n<=10000)。
输出

一行,即n!的值。


样例输入:

样例输出:

6

先放代码:

#include <cstdio>#include <cstring>using namespace std;int main(){int a[100000],n,w=1,x=0;scanf("%d",&n);a[1]=1;for(int i=1;i<=n;++i){x=0;for(int j=1;j<=w;++j){a[j]=a[j]*i+x;x=a[j]/10;a[j]%=10;}while (x>0) {w++;a[w]=x%10;x/=10;}}for(int i=w;i>=1;--i){printf("%d",a[i]);}} 
补充另一种写法,比较好用与方便
#include <cstdio>#include <cstring>#define maxn 100000using namespace std;int a[maxn];int main(){int n,x=0,k;scanf("%d",&n);memset(a,0,sizeof(a));a[maxn]=1;for(int i=1;i<=n;++i){x=0;for(int j=maxn;j>=1;--j){k=a[j]*i+x;a[j]=k%10;x=k/10;}}k=1;while (a[k]==0) ++k;for(int i=k;i<=maxn;++i){printf("%d",a[i]);}} 

本题考查的是高精度乘法,第一次写,感觉要死了一样,终于理解了,表示开心,不知读者们是否有过这样的想法,高精度的源代码咱都会打,但是一旦牵扯到在题目中用便懵逼了,不知听谁曾经说,只要打包成函数就可以了,其实不然。今天总算知道怎么用,其实就是一个模板,背掉就好了。
大家若有什么好的方法,请向我这个蒟蒻分享分享,感谢大佬

阅读全文
0 0
原创粉丝点击