题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1042

题目描述:题目异常的简洁,所以很容易入坑。其实想一想,10000!这个数确实蛮恐怖的~

一、我们设一个递减的整数为n,存放值的字符串为s。每次s内的所有字符都将与n做一次相乘操作,

即循环体内:

s[j]=s[j]*i+k;             //k为进位
k=s[j]/10; 
s[j]%=10;

那么这个循环究竟循环多少次呢?很明显,是s的有效长度。

那么s的有效长度又是多少呢?

s的值越来越大,长度也是不断的增长。如果我们一开始就将s设置为0000000000000……00000000000000000001

那么会产生无数次无效的运算操作,很显然不是很合理。

所以我们设置一个记录s长度的变量来控制循环的次数,我们假设为t。

n的上限为10000,所以s一次乘操作他的值最大变化为后面加4个0,也就是单次处理  t最多加4。

一个看起来不是很正规但是很简单的处理:if(s[t-3]||s[t-2]||s[t-1]||s[t])    t+=4;   如果s后四位不全是0,那么意味着下次乘操作可能会溢出。

所以再给t补充4位

二、考虑0和1的输入

#include<stdio.h>
#include<string.h>int main()
{int n,i,j,t,k;int s[50001];while(~scanf("%d",&n)){memset(s,0,sizeof(s));if(n==0||n==1)printf("1\n");else{s[0]=1; k=0;t=4;for(i=n;i>=2;i--){for(j=0;j<=t;j++){   s[j]=s[j]*i+k;k=s[j]/10;s[j]%=10;}if(s[t-3]||s[t-2]||s[t-1]||s[t])t+=4;}while(!s[t])t--;for(i=t;i>=0;i--)printf("%d",s[i]);printf("\n");}    }return 0;
}

思路2:加法运算是从个位(末端)开始,并且涉及到进位。

大数——大数阶乘(hdu1042)相关推荐

  1. C语言实现大数的阶乘(附完整源码)

    实现大数的阶乘 大数 _large_num结构体 实现了以下相关的几个接口 大数的阶乘完整源码(定义,实现,main函数测试) 大数 _large_num结构体 typedef struct _lar ...

  2. java大数类阶乘_Java中的大数阶乘

    java大数类阶乘 It is not possible to store factorial for large number like 50 into inbuilt data types lik ...

  3. 求大数的阶乘方法(数组)

    主要思想: 由于大数阶乘结果通常非常大,用long long保存都不一定够,因此,大数阶乘不能直接去相乘.可以采用数组存储进位的方法来存储. 例如,定义一个数组a[3],a[2] = 3,a[1] = ...

  4. 1000的阶乘用c语言实现,用C语言实现计算大数的阶乘

    #include #define SIZE 1000 int BigFact(int m, short data[]); int main() { short data[SIZE] = { 0 };/ ...

  5. C#阶乘类,可以精确计算大数的阶乘,10000的阶乘只要1.3秒左右

    关于阶乘,老郭和宝宝等前辈做了大量研究,计算速度也达到了非常快的水准.本文宗旨不在于和他们比快,因为他们专门为阶乘做了很多优化.本文介绍的是使用C#直接计算的方法,速度虽然不能跟他们相比,但在一般场合 ...

  6. 阶乘类,可以精确计算大数的阶乘,10000的阶乘只要1.3秒左右

    关于阶乘,老郭和宝宝等前辈做了大量研究,计算速度也达到了非常快的水准.本文宗旨不在于和他们比快,因为他们专门为阶乘做了很多优化.本文介绍的是使用C#直接计算的方法,速度虽然不能跟他们相比,但在一般场合 ...

  7. 大数——大数判等(hdu2054)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2054 题目描述:题目比1042还简洁..我们都知道hdu的11页的水题有多水~所以看到这个之后我果断 ...

  8. 大数——大数相加(hdu1002)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1002 题目描述:ACM入门的第一题,两个超出整型变量范围的整数进行相加运算. 一.因为整型装不下,所 ...

  9. 大数运算(6)——大数阶乘(求位数)

    对于求一个大数的阶乘的位数一般有两种方法: 第一种: lg(N!)=[lg(N*(N-1)*(N-2)*......*3*2*1)]+1 =[lgN+lg(N-1)+lg(N-2)+......+lg ...

最新文章

  1. UNet为什么在医学图像分割表现好?
  2. 在main()之前,IAR都做了啥?
  3. 4G EPS 的接口类型
  4. Google 鼓励的 13 条代码审查标准,建议收藏!
  5. 跟踪了下CSDN博客之星的竞选数据,我就看看不评论,你怎么看?
  6. 5.1.2 操作系统控制I/O设备的I/O控制器
  7. OSG与opengl的shader结合
  8. 怕入错行?这群技术人写了本“择业指南”
  9. 使用开源库 Objective-C RegEx Categories 处理正则表达式
  10. Codeforces Round #223 (Div. 2): E. Sereja and Brackets(线段树)
  11. Maven项目环境搭建实例.
  12. nginx 四种策略
  13. 表单提交后打印后台传过来的数据
  14. 根据数据库名称glkf查看使用的用户
  15. k8s之根据tag发布spring boot项目
  16. vue展示日历 考勤展示_vue实现简单的日历效果
  17. 安卓rom制作教程_Android ROM制作教程-开发必需
  18. Cgroup资源配置方法详细解析
  19. 关于MUI一个很实用的前端框架
  20. MATLAB—view函数观察三视图

热门文章

  1. 25 PP模块-创建工厂日历报错-请输入年度xxxx和xxxx之间的有效区域
  2. oracle substr(table),oracle中的substr()函数
  3. jwt认证机制优势和原理_微服务统一登录认证怎么做?JWT?
  4. C++:利用sort()对vector中的数据自定义排序
  5. 关于在Win10系统将标注软件labelme打包生成.exe可执行文件
  6. 深度学习logit是什么?
  7. Kafka单节点多broker的部署和使用
  8. [Ansys Workbench] 模型网格划分练习
  9. [UE4]报错:Material with missing usage flag was applied to skeletal mesh 的解决方法:为材质设置相应的 usage flag
  10. oracle 自带table,Oracle中table函数的使用详解