UVa 623

计算N!

n上限为1000自然不能直接算。所以可以开一个数组f[],f[]每一位存N!结果的6位。如果按进制来理解,就是10^6进制:

例如 11!=39916800=11*10!=11*(3628800)=11*(3*(10^6)^1+628800*(10^6)^0)

11*628800=6916800=6*(10^6)^1+916800*(10^6)^0,

所以上式进位为6,可得 11!=(11*3+6)*(1^10)^1+916800*(10^6)^0=39916800 ,如下图

输出时高位的前导0用printf("%06d")前面的0表示输出6位,不足6位前面补零。简直完美!

参考代码:

 #include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn = ;//位数
int f[maxn];//上限1000!有2000+位,1005*6位足够了 int main()
{
int n;
while (cin>>n)
{
memset(f, , sizeof(f));
int len = ;//初始只有1位
f[] = ;//1!=1
for (int i = ; i <= n; i++)//从2开始到n求阶乘
{
int c = ;//表示进位
for (int j = ; j < len; j++) //模拟乘法,用每位来乘以i
{
int t = f[j] * i + c;
f[j] = t % ;
c = t / ;
}
if (c) f[len++] = c;//如果进位大于0,就新增一位
}
cout << n << "!" << endl;
cout << f[len - ];
for (int i = len - ; i >= ; i--)
printf("%06d", f[i]);//“%06d"的0表示若f[i]不足6位前面补0
cout << endl;
}
}

UVa 623 大整数乘法的更多相关文章

  1. poj2389-Bull Math(大整数乘法)

    一,题意: 大整数乘法模板题二,思路: 1,模拟乘法(注意"逢十进一") 2,倒序输出(注意首位0不输出) 三,步骤: 如:555 x 35 = 19425  5 5 5  5 5 ...

  2. POJ 1001 解题报告 高精度大整数乘法模版

    题目是POJ1001 Exponentiation  虽然是小数的幂 最终还是转化为大整数的乘法 这道题要考虑的边界情况比较多 做这道题的时候,我分析了 网上的两个解题报告,发现都有错误,说明OJ对于 ...

  3. OpenJudge 2980 大整数乘法

    链接地址:http://bailian.openjudge.cn/practice/2980/ 题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 求两个不超过200位的非负整数的积 ...

  4. 大整数乘法python3实现

    因为python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,可是思想是一样的.利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位 ...

  5. 【老鸟学算法】大整数乘法——算法思想及java实现

    算法课有这么一节,专门介绍分治法的,上机实验课就是要代码实现大整数乘法.想当年比较混,没做出来,颇感遗憾,今天就把这债还了吧! 大整数乘法,就是乘法的两个乘数比较大,最后结果超过了整型甚至长整型的最大 ...

  6. [大整数乘法] java代码实现

    上一篇写的“[大整数乘法]分治算法的时间复杂度研究”,这一篇是基于上一篇思想的代码实现,以下是该文章的连接: http://www.cnblogs.com/McQueen1987/p/3348426. ...

  7. 大整数乘法(Comba 乘法 (Comba  Multiplication)原理)

    Comba 乘法以(在密码学方面)不太出名的 Paul G. Comba 得名.上面的笔算乘法,虽然比较简单, 但是有个很大的问题:在 O(n^2) 的复杂度上进行计算和向上传递进位,看看前面的那个竖 ...

  8. JS实现大整数乘法(性能优化、正负整数)

    本方法的思路为: 一:检查了输入的合法性(非空,无非法字符) 二:检查输入是否可以进行简单计算(一个数为 0,1,+1,-1) 三:去掉输入最前面可能有的正负符号,并判断输出的正负 四:将输入的值分成 ...

  9. 算法笔记_034:大整数乘法(Java)

    目录 1 问题描述 2 解决方案 2.1 蛮力法   1 问题描述 计算两个大整数相乘的结果. 2 解决方案 2.1 蛮力法 package com.liuzhen.chapter5; import ...

随机推荐

  1. Leetcode496.Next Greater Element I下一个更大的元素1

    给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x 的下一个更 ...

  2. 跟我一起了解koa(四)

    我们使用第二讲中的路由页面,再结合ejs,一起了解ejs在koa中的应用 1.安装koa-views和ejs cnpm install --save koa cnpm install koa-rout ...

  3. hadoop面试题及答案解析

    1.(Datanode)程序负责HDFS数据存储. 2.HDFS中的block默认保存(3份). 3.(TaskTracker)程序通常与NameNode在一个节点启动. 分析:hadoop集群是基于 ...

  4. leetcode 448 - 476

    448. Find All Numbers Disappeared in an Array Input: [4,3,2,7,8,2,3,1] Output: [5,6] 思路:把数组的内容和index ...

  5. Jdbc封装和对CURD的封装

    1.查询emp表中的所有记录为例 2.测试类 public Emp getByNameAndEmail(String name, String email){ String sql = "s ...

  6. Sublime keymap 个性修改

    [ // 保存全部 {"keys": ["ctrl+alt+s"], "command": "save_all"}, / ...

  7. LintCode_514 Paint Fence

    题目 here is a fence with n posts, each post can be painted with one of the k colors.You have to paint ...

  8. SpringCloud微服务实战一:Spring Cloud Eureka 服务发现与注册中心(高可用实列为两个注册中心)

    微服务架构: 微服务架构的核心思想是,一个应用是由多个小的.相互独立的.微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖.不同服务通过一些轻量级交互机制来通信,例如 RPC.HTTP 等, ...

  9. Javascript实现信息滚动效果的方法

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  10. 【JZOJ3623】【SDOI2014】数表(table) 树状数组+离线+莫比乌斯反演

    题面 100 \[ Ans=\sum_{i=1}^n\sum_{j=1}^mg(gcd(i,j)) \] 其中, \[ g(d)=\sum_{i|d}i \] 我们注意到\(gcd(i,j)\)最多有 ...