hdu1042题讲解
来源:互联网 发布:淘宝客鹊桥怎么玩 编辑:程序博客网 时间:2024/04/30 10:52
/*
#include<stdio.h>
#include<string.h>
const int maxn=40000;//开得太大!!
int f[maxn];
int main()
{
int i,j,n;
while(scanf("%d",&n))
{
memset(f,0,sizeof(f));
f[0]=1;
for(i = 2; i<= n; i++)
{//乘以i
int c=0;
for(j=0; j < maxn; j++)
{
int s=f[j]*i+c;
f[j]=s%10000;
c=s/10000;
}
}
for(j = maxn-1; j>=0; j-- )if(f[j])break;//忽略前导0
for(i = j; i >= 0; i-- )printf("%d",f[i]);
printf("\n");
}
return 0;
}*/
/*求N!,由 N!=N*(N-1)!,所以求解N!的算法就是递推法。 当N值很小时可以直接用int型数据进行运算就
可以解决了,但当N值很大,比如N=10000或跟大时就没有办法用具体的数据类型来存放这样大的,因为他们的
为数都远远超过了int ,long甚至long long型的范围(如10000!有35660位)。为了解决所有数据类型都无法
存放这样一个庞大的数据,我想到了可以将这样一个数据一位一位的存放到一个字符数组或int型数组中,对其
每一位进行单独运算,然后将结果存放到另一个数组里,这样就解决了庞大数据的存放问题。但具体怎样对两个
都比较大的数的作乘法运算呢?这就要利用大整数的高精度运算。A,B都是位数比较多的大整数,现在要作A*B运
算。小学时我们作45*12是先把12中的2与45的个位5相乘,再把2与45的十位4相乘,然后同样再把12中的1与45中
的每一位从低到高依次相乘。在这里我们模拟也可以45*12,把A中每一位从低到高与B中的个位相乘,与后再与B
中的十位相乘,依次类推,最后把所有的结果对应相加就可以得到所要求的结果了。我们用a[100000]来存N!的结
果,如十进制数3478,存在a里面是:a[0]=4(记录数的长度),a[1]=8,a[2]=7,a[3]=4,a[4]=3;*///实现代码如下: */
#include<iostream>
using namespace std;
int a[40000];
int main()
{
int N,i,j,pre;
while (cin >> N)
{
a[0] = 1;
a[1] = 1;
if (N==0||N==1)
{
cout << 1 << endl;
continue;
}
for (i = 2; i <= N; i++)
{
pre = 0;
for (j = 1; j <= a[0]; j++)
{
a[j] *= i;
a[j] += pre; //加上进位
pre = a[j] / 10; //进位值
a[j] %= 10; //本位
}
while (pre)//对末尾的进位进行存储
{
a[j] = pre % 10;
a[0] = j;
pre /= 10;
j++;
}
}
for (i = a[0]; i >= 1; i--)//输出
{
cout << a[i];
}
cout<<endl;
}
return 0;
}
- hdu1042题讲解
- hdu1042
- hdu1042
- hdu1042
- hdu1042
- hdu1042
- hdu1042
- hdu1042
- hdu1042
- HDU1042
- HDU1042
- HDU1042 N!
- hdu1042 N!
- N! hdu1042
- hdu1042 N!
- HDU1042--N!
- hdu1042 N!
- hdu1042!【水题】
- 卡特兰数
- 怎样让struts2的s:radio标签默认选中一个?
- 中国十大域名注册商
- struts action接收list对象
- g723源码详细分析-11-多脉码激励编码
- hdu1042题讲解
- struts2 Action之间传递值
- hdu1066题讲解
- 打印网页中定义的部分内容
- 使用struts2的日期控件
- Android开发之XML反射
- Combinatorial Testing
- 团队建设ing.
- hdu 1425 题讲解