首先明白这是大数问题,大数问题大多采用数组来实现。如何进位、求余等。比如1047 (Integer Inquiry);

对于1042问题 计算10000以内数的阶乘,因为10000的阶乘达到35660位。所以普通的做法是无法实现的。所以我们只能定义一个40000个成员的数组就可以啦。

int a[40000];

编程思想:(把计算结果的每一位上的数字保存到一个数组成员中,)例如将1234保存至数组中,结果为 a[0]=4 a[1]=3 a[2]=2 a[3]=1, 一个int 型数据存放一个小于10的数绝对可以。就是处理起来有点麻烦。把整个数组看成一个数字,这个数字与一个数相乘:需要每一位都与这个乘数相乘并且还需加上前一位的进位。(int 型足以  因为乘数和一个小于十的数相乘不会大于100000,再加上进位的int型数据,也不会有问题)

运算方法:乘积的个位是当前位上表示的数字,10以上的数需要进位。

int temp = a[x] *乘数 + 进位;// temp 代表临时结果

然后把temp个位的数取出来放到数组中

a[x]=temp%10;

接下来计算进位:

进位 =temp /10;

这样依次计算就可以求出整个数组,特别注意最后可能有进位,然后依次将其拆分完放到相应的位置上去为止。

下图是C++代码:

#include<iostream>
using namespace std;
int main()
{
int n;
int a[];
while(cin>>n)
{
if(n>&&n<)
break;
a[]=;
int digit=;
int temp,s=;
for(int i=;i<=n;i++)
{
for(int j=;j<digit;j++)
{
temp=a[j]*i+s;
a[j]=temp%;
s=temp/;
}
while(s)
{
a[digit++]=s%;
s/=;
}
}
for(int k=digit;k>=;k--)
{
cout<<a[k-];
}
cout<<endl; }
return ;
}

HDU-1042 N!的更多相关文章

  1. HDU 1042 N! 參考代码

    HDU 1042 N! 题意:给定整数N(0 ≤ N ≤ 10000), 求 N! (题目链接) #include <iostream> using namespace std; //每一 ...

  2. HDU 1042 大数阶乘

    B - 2 Time Limit:5000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  3. hdu 1042 N!(高精度乘法 + 缩进)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目大意:求n!, n 的上限是10000. 解题思路:高精度乘法 , 因为数据量比较大, 所以 ...

  4. hdu 1042 N!

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1042 N! Description Given an integer N(0 ≤ N ≤ 10000) ...

  5. HDU 1496 Equations hash HDU上排名第一!

    看题传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1496 题目大意: 给定a,b,c,d.a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 ...

  6. hdu 1042 N!(大数的阶乘)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. HDU -2674 N!Again(小技巧)

    这道题有个小技巧,就是既然是n!,那么对2009求余,只要大于2009!,那么一定是0,在仔细想想会发现,根本到不了2009,只要到2009的最大质因数就行了,为什么呢?因为最大质因数是最大的一个不能 ...

  8. hdu 1042

    貌似之前也写过这个题目的解题报告...老了,记性不好 从贴一遍吧! 代码理解很容易 AC代码: #include <iostream> #include <stdio.h> # ...

  9. hdu 1042 N! 高精度运算

    N!                                                                              Time Limit: 10000/50 ...

  10. hdu 1042 N!(大数)

    题意:求n!(0 ≤ N ≤ 10000) 思路:大数,用数组存储 1.首先要考虑数据N!的位数,因为最大是10000!,可以计算一下大概是5+9000*4+900*3+90*2+10*1=38865 ...

随机推荐

  1. eclipse 插件未安装成功定位

    以gef未安装成功为例 在eclipse根目录下: eclipse –clean –console –noExit 右击窗口标题栏,属性,勾中快速编辑模式,这样可以在命令行窗口点击右键将剪贴板上的内容 ...

  2. jQuery的delegate()与proxy()方法

    1. jQuery 事件 - delegate() 方法 定义和用法 delegate() 方法为指定的元素(属于被选元素的子元素)添加一个或多个事件处理程序,并规定当这些事件发生时运行的函数. 使用 ...

  3. SuSE Apache2 VirtualHost Build

    1,linux version:openSuSE 12.1 2,add ServerName to DNS(johv.ts.com ,use the same IP) 3,mkdir /srv/www ...

  4. 通用窗口类 Inventory Pro 2.1.2 Demo1(上)

    插件功能 按照Demo1的实现,使用插件来实现一个装备窗口是很easy的,虽然效果还很原始但是也点到为止了,本篇涉及的功能用加粗标出,具体的功能如下: 1.实现了两个窗口,通过点击键盘I来,打开或者关 ...

  5. VCL Tclientsocket, Tserversocket控件安装方法

    菜单component->Install Packets 按Add按钮,选择delphi目录里的bin目录下的dclsockets70.bpl(delphi2010是dclsockets140. ...

  6. C#: 数据绑定

    数据绑定是分离UI和后端主逻辑程序的一种好的办法.这里总结下TextBox, Label, ComboBox, ListBox, DataGridView的数据绑定 数据绑定都是通过DB来和UI控件的 ...

  7. poj: 1005

    简单题 #include <iostream> #include <stdio.h> #include <string.h> #include <stack& ...

  8. linux第5天 socket api

    IPv4套接口地址结构通常也称为“网际套接字地址结构”,它以“sockaddr_in”命名,定义在头文件<netinet/in.h>中 通用地址结构用来指定与套接字关联的地址.以socka ...

  9. CCF考前注意几点

    1.数组最好保持初始化习惯,且检查数组初始化在循环内还是循环外,若在循环内需要对数组进行处理,则数组初始化必须放在for循环内. 2.for循环保持好习惯,用括号括起来,以免粗心. 3.if条件判断要 ...

  10. git操作??

    一直在搞git,但是难度真的很大,我的英语超烂,而申请git账号时全部是英文的,我就拿着翻译有道词典,必应.进行翻译,一个一个单词的往上面打,一张网页能翻译一下午,最后还是不知道应该具体怎么去操作,所 ...