首先明白这是大数问题,大数问题大多采用数组来实现。如何进位、求余等。比如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 ;
}

最新文章

  1. BZOJ 1034 题解
  2. SQL Server への接続を許可するファイアーウォール設定
  3. 如何在VMWare Workstation实现虚拟机与真机的文件共享
  4. kill 命令详解 系统信号
  5. Oracle中添加视图
  6. Codeforces 379D - New Year Letter
  7. n个数的最大公约、最小公倍数
  8. node 上传文件 路径 重命名等问题
  9. 尝试回答js问题
  10. OC的内存管理(一)
  11. C#中的Infinity和NaN
  12. 用premake5创建lua532工程
  13. linux 网络不通问题排查
  14. 第三节:Windows平台部署Asp.Net Core应用(基于IIS和Windows服务两种模式)
  15. 安装酷痞到IIS7.x共用80端口Windows(64位)系统下运行多个酷痞
  16. Linux实践四:ELF文件格式分析
  17. android开发(38) 使用 DrawerLayou t实现左侧抽屉式导航菜单
  18. hbase建表时 ERROR: java.io.IOException: Table Namespace Manager not ready yet, try again later
  19. python之列表操作
  20. EasyUI Tree checkbox node

热门文章

  1. CentOS安装NodeJS v0.10.25 + Express
  2. [转]jquery $(document).ready() 与window.onload的区别
  3. 数据存储之plist、偏好设置
  4. Java的数据转换
  5. UITabBarController底层实现
  6. java io读书笔记(5) Writing Bytes to Output Streams
  7. 轉發和重定向-JSP
  8. hdu5255 魔法因子
  9. Codeforces Round #284 (Div. 1)
  10. nginx、fastCGI、php-fpm关系梳理(转载 http://blog.sina.com.cn/s/blog_6df9fbe30102v57y.html)