首先明白这是大数问题,大数问题大多采用数组来实现。如何进位、求余等。比如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. iOS - (两个APP之间的跳转)

    一个程序若要跳到另一个程序.需要在目标程序的plist文件里面修改: 打开info.plist,添加一项URL types 展开URL types,再展开Item0,将Item0下的URL ident ...

  2. Java基础之线程——使用Runnable接口(JumbleNames)

    控制台程序. 除了定义Thread新的子类外,还可以在类中实现Runnable接口.您会发现这比从Thread类派生子类更方便,因为在实现Runnable接口时可以从不是Thread的类派生子类,并且 ...

  3. Java Servlet(二):servlet配置及生命周期相关(jdk7+tomcat7+eclipse)

    该篇文章记录了Servlet配置相关用法及Servlet在Servlet容器中生命周期方法. Tomcat是一个Servlet容器: 1.Servlet容器管理了Servlet的整个生命周期,并调用s ...

  4. SQL 数据库 存储过程 视图

    一.存储过程 1.概述 存储过程是一组编译在单个执行计划中的T-SQL语句 存储过程:就像函数一样的会保存在数据库中(可编程性) 存储过程的优点: 1.允许模块化程序设计 2.允许更快执行如果某操作需 ...

  5. CS2013调试DLL

    需要打开两个项目,一个是Win32Project1,由这个项目创建DLL,注意要在DLL函数前加上__declspec(dllexport),这样就会还配套生成一个.lib 然后再打开一个项目,一般为 ...

  6. Apache与Nginx虚拟主机设置(多域名和多端口的区别)

    为了方便管理虚拟主机,应该尽量少修改主配置文件http.conf或者nginx.conf,大部分修改变更都在虚拟主机片配置文件httpd- vhost.conf或者vhost.conf中完成,这样有利 ...

  7. Hibernate二进制或大文件类型数据和Oracle交互

    //测试存储二进制文件 @Test public void test() throws IOException{  InputStream in=new FileInputStream("E ...

  8. struts文件上传(单文件)

    第01步:配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version= ...

  9. IntelliJ IDEA 14注册码

    User:xring Key:21423-V4P36-U7W8K-8CYUK-93HXA-MKGZ5 User:arix Key:52998-LJT74-J7YEX-UPVT3-Q5GUF-5G4B5 ...

  10. Logstash学习1-logstash的简单例子

    如何安装ELK Redis插件 1. 安装好logstash后.2. 最简单的logstash.logstash -e 'input { stdin { } } output { stdout {} ...