[推荐] 擂台:超大整数高精度快速算法-4 (快速计算千万阶乘) [问题点数:200分,结帖人gxqcn]

Bbs1
本版专家分:0
结帖率 100%
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
红花 2005年1月 C/C++大版内专家分月排行榜第一
Blank
黄花 2005年2月 C/C++大版内专家分月排行榜第二
Blank
蓝花 2012年1月 扩充话题大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
红花 2005年8月 C++ Builder大版内专家分月排行榜第一
2005年6月 C++ Builder大版内专家分月排行榜第一
2005年5月 C++ Builder大版内专家分月排行榜第一
2005年4月 C++ Builder大版内专家分月排行榜第一
2005年3月 C++ Builder大版内专家分月排行榜第一
2004年11月 C++ Builder大版内专家分月排行榜第一
2004年10月 C++ Builder大版内专家分月排行榜第一
2004年9月 C++ Builder大版内专家分月排行榜第一
2004年8月 C++ Builder大版内专家分月排行榜第一
Blank
黄花 2007年6月 C++ Builder大版内专家分月排行榜第二
2007年3月 C++ Builder大版内专家分月排行榜第二
2007年1月 C++ Builder大版内专家分月排行榜第二
2006年1月 C++ Builder大版内专家分月排行榜第二
2005年12月 C++ Builder大版内专家分月排行榜第二
2005年11月 C++ Builder大版内专家分月排行榜第二
2005年7月 C++ Builder大版内专家分月排行榜第二
2004年12月 C++ Builder大版内专家分月排行榜第二
Blank
蓝花 2007年2月 C++ Builder大版内专家分月排行榜第三
2007年6月 Delphi大版内专家分月排行榜第三
2006年2月 C++ Builder大版内专家分月排行榜第三
2005年10月 C++ Builder大版内专家分月排行榜第三
2004年7月 C++ Builder大版内专家分月排行榜第三
Bbs1
本版专家分:0
Blank
红花 2005年8月 C++ Builder大版内专家分月排行榜第一
2005年6月 C++ Builder大版内专家分月排行榜第一
2005年5月 C++ Builder大版内专家分月排行榜第一
2005年4月 C++ Builder大版内专家分月排行榜第一
2005年3月 C++ Builder大版内专家分月排行榜第一
2004年11月 C++ Builder大版内专家分月排行榜第一
2004年10月 C++ Builder大版内专家分月排行榜第一
2004年9月 C++ Builder大版内专家分月排行榜第一
2004年8月 C++ Builder大版内专家分月排行榜第一
Blank
黄花 2007年6月 C++ Builder大版内专家分月排行榜第二
2007年3月 C++ Builder大版内专家分月排行榜第二
2007年1月 C++ Builder大版内专家分月排行榜第二
2006年1月 C++ Builder大版内专家分月排行榜第二
2005年12月 C++ Builder大版内专家分月排行榜第二
2005年11月 C++ Builder大版内专家分月排行榜第二
2005年7月 C++ Builder大版内专家分月排行榜第二
2004年12月 C++ Builder大版内专家分月排行榜第二
Blank
蓝花 2007年2月 C++ Builder大版内专家分月排行榜第三
2007年6月 Delphi大版内专家分月排行榜第三
2006年2月 C++ Builder大版内专家分月排行榜第三
2005年10月 C++ Builder大版内专家分月排行榜第三
2004年7月 C++ Builder大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
红花 2018年8月 Delphi大版内专家分月排行榜第一
2018年7月 Delphi大版内专家分月排行榜第一
2018年4月 Delphi大版内专家分月排行榜第一
2018年3月 Delphi大版内专家分月排行榜第一
Blank
黄花 2016年11月 Delphi大版内专家分月排行榜第二
Blank
蓝花 2011年10月 其他开发语言大版内专家分月排行榜第三
2010年8月 其他开发语言大版内专家分月排行榜第三
2007年5月 其他开发语言大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
蓝花 2007年1月 VC/MFC大版内专家分月排行榜第三
Blank
蓝花 2007年1月 VC/MFC大版内专家分月排行榜第三
Blank
蓝花 2007年1月 VC/MFC大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
红花 2000年9月 VB大版内专家分月排行榜第一
Blank
蓝花 2000年12月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
红花 2000年9月 VB大版内专家分月排行榜第一
Blank
蓝花 2000年12月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Blank
红花 2000年9月 VB大版内专家分月排行榜第一
Blank
蓝花 2000年12月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Blank
红花 2000年9月 VB大版内专家分月排行榜第一
Blank
蓝花 2000年12月 VB大版内专家分月排行榜第三
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Bbs1
本版专家分:0
Blank
红花 2000年9月 VB大版内专家分月排行榜第一
Blank
蓝花 2000年12月 VB大版内专家分月排行榜第三
其他相关推荐
计算机基础—任意整数补码的快速计算方法
这几天读《深入理解计算机系统》(英文名: Computer Systems : A Programmer's Perspective)一书时,再次复习到了整数的各种类型及其表示方法。本科学习计算机组成原理时,学过原码、反码、补码的概念,可惜应付完考试就基本忘光了。。。         之前只是依稀记得对于有符号整数,要用最高位来表示符号,在不考虑溢出的情况下:      1)对于有符号正数:最
Java阶乘计算
用for循环做1!加到10! int s=1;//因为1的阶乘是1我们可以定义第一个阶乘 int sum=0;//定义一个阶乘和 for(int i=1;i s=s*i;// sum+=s;//相当于sum=sum+s } System.out.println(sum);
高精度阶乘
题目详情 15:阶乘和 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 用高精度计算出S=1!+2!+3!+…+n!(n≤50) 其中“!”表示阶乘,例如:5!=5*4*3*2*1。 输入正整数N,输出计算结果S。 输入 一个正整数N。 输出 计算结果S。 样例输入
C++语言计算任意正整数的正整数次幂(用字符串实现基础计算
C++语言计算任意正整数的正整数次幂,用字符串实现基础计算,适用于初学者参考。
蓝桥杯(java)阶乘计算,输入一个正整数n,输出n!的值。(高精度计算,用到数组)
问题描述  输入一个正整数n,输出n!的值。  其中n!=1*2*3*…*n。算法描述  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。输入格式...
SolidEdge ST10快速入门教程
该书是根据北京兆迪科技有限公给外几十家不同行业的公(含国外独资和合资公)的培训教案整理而成的
高精度阶乘计算
题目解析 该题考查的就是高精度,最后阶乘得到的数会很大从而溢出,因此需要用字符串来储存数的每一位,比如a[0]表示个位数,a[1]表示十位数,......。<br> 该题还涉及到进位问题,具体的方法和手算的方法差不多,每乘一个数时,从0开始遍历,进位要提前计算出来。 题目代码 #include <iostream> #include <string.h&g...
计算5的阶乘:5!=5*4*3*2*1
 /** *计算5的阶乘: *              5!=5*4*3*2*1  *@author 马涛 * April 14th,2009 */public class Five{  public static void main(String[] args)  {    int a =5;    for(int b= 4; b>=1 ;b-- )    {            a*=b;
算法训练 阶乘
问题描述   一个整数n的阶乘可以写成n!,它表示从1到n这n个整数的乘积。阶乘的增长速度非常快,例如,13!就已经比较大了,已经无法存放在一个整型变量中;而35!就更大了,它已经无法存放在一个浮点型变量中。因此,当n比较大时,去计算n!是非常困难的。幸运的是,在本题中,我们的任务不是去计算n!,而是去计算n!最右边的那个非0的数字是多少。例如,5! = 1*2*3*4*5 = 120,因此5!
快速DCT算法
DCT算法可以说是有损压缩的第一步,多用在视频压缩方面。它将二维转化为一维数据,并且将能量聚集到左上角。关于DCT,有很多快速算法,我个人认为,我这个算法还是比较快速的。下面是我的代码: #include #include #include #include #define PI 3.1415926 double *C=NULL; double *temp_2D=NULL; #d
C语言高精度计算N的阶乘代码
【问题描述】 精确计算N的阶乘。其中,N可能是小于200的任意正整数。 【输入形式】 输入文件为当前目录下的factor.in。该文件只包含一个正整数,表示需要求该正整数阶乘。 【输出形式】 输入文件为当前目录下的factor.in。该文件只包含一个正整数,表示需要求该正整数阶乘。 【输入样例】 57 【输出样例】 40526919504877216755680601905432322134980384796226 602145184481280000000000000
高精度计算-大整数除法
问题描述求两个大的正整数相除的商 输入数据 第 1 行是测试数据的组数 n,每组测试数据占 2 行,第 1 行是被除数,第 2 行是除数。 每组测试数据之间有一个空行,每行数据不超过 100 个字符 输出要求 n 行,每组测试数据有一行输出是相应的整数商解题思路基本的思想是反复做减法,看看从被除数里最多能减去多少个除数,商就是多少。一个一个减显然太慢,如何减得更快一些呢?以 7546 除以
大数阶乘问题(来自大佬博客的方法)
Java计算阶乘(n!)需要使用实现使用BigDecimal类,因为用int最多正确算到12!,用long最多正确算到20!计算机中提供了长整型和双精度等能存储较大数的数据类型,但在有些时候,这样的数据类型不能满足实际用的需求,比如大数的阶乘。请编写程序,实现大数阶乘算法。要求能计算N(6<=300)的阶乘。 import java.math.BigDecimal; im
c++阶乘取模
#include &lt;bits/stdc++.h&gt; using namespace std; long long n,p; long long now; const int a[100]={ 682498929,491101308,76479948,723816384,67347853,27368307,625544428,199888908,888050723,927880474, 2...
整数完全平方数的快速判断方面的思路
16.5.3 Perfect Square A significant fraction of non-squares can be quickly identified by checking whether the input is a quadratic residue modulo small integers. mpz_perfect_square_p first tests t
【高精】阶乘
咳咳,这是一道高精的题,好久以前十分弱智的题(弱智吗???),只是看起来好难,于是一直放弃。。。可是今天看见了,发现1.6(openjudge)里面竟然就这一个没打钩,于是只好硬着头皮做了。。先贴上题目:15:阶乘和总时间限制: 1000ms 内存限制: 65536kB 描述:用高精度计算出S=1!+2!+3!+…+n!(n≤50)其中“!”表示阶乘,例如:5!=5*4*3*2*1。输入正
用C语言计算n的阶乘
利用了一个简单的for循环test.c#define _CRT_SECURE_NO_WARNINGS 1 #include &lt;stdio.h&gt; int main() { int n = 0; int i = 0; int sum = 1; scanf("%d", &amp;n); for (i = 1; i &lt;= n; i++) { sum = sum*i; }...
整数平方根:整数开方及大整数开方解决方法
输入一个正整数N(1≤N≤ 10^100 ),试用二分法计算它的平方根的整数部分。
高精度计算2的n次幂
#include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;cstdio&gt; #include&lt;string&gt; #include&lt;vector&gt; #include&lt;cstdlib&gt; #include&lt;algorithm&gt; using namespace std; char a[1005
高精度阶层(高精度计算小试牛刀)
#include #include #include #define MAX_NUM 205 using namespace std; int main() {     int n, num[MAX_NUM], result[MAX_NUM], ans ;     scanf("%d",&n);     memset(num, 0, sizeof(num));     me
关于大量数据去重的基本算法思路
百万级千万级数据排序去重,一种特别高效的做法
编写一个JSP程序,计算整数阶乘,并显示出结果。(已多次完善)
功能:通过表单提交一个正整数,然后计算它的阶乘。 方法:先声明计算阶乘的方法,再调用该方法,最后在页面上输出结果。其中要对提交的是否为整数作判断,是整数则进行阶乘计算,不是整数则要求重新提交。
高精度对数函数的实现
针对高精对数,我目前已采用了比较容易编程和高效的方法。就是开方分解Ln(x)中的X(早先调试开方程序时就发现,大于零的数进行开方运算,当开方次数无限增加时,开方值无限接近1)
JAVA高精度1_大数相加_阶乘
第一道:http://acm.hdu.edu.cn/showproblem.php?pid=1002 最基础的一个大数问题,位数可以到达1000位,以前用C做的时候用字符串处理加翻转来做,现在弄Java的Biginteger类做的话就很简单了。  注意几个问题: 1.和NYoj的这个大数相加问题格式不一样,HDU的这个是每组数据一个空行,最后一组不空行,NYoj上的直接pri
【1998普及】高精度计算
【1998普及】高精度计算Description 用高精度计算出S=1!+2!+3!+...n!)(n表示阶乘,例如:5!=5*4*3*2*1 Input 输入正整数N Output 输出计算结果S Sample Input 2 Sample Output 3 题目分析 常规的高精度计算。 用数组倒序存储每个高精度数据,第一个数x[0]
快速立即除法的乘法实现(通用算法)
快速立即除法的乘法实现(通用算法)原创:HAM这里我们要讲的是如何使用整数乘法来完成除数为常数的整数除法运算,我们假定都是无符号操作,并且运算在Intel 32bit x86 CPU上。在整数除法操作后,我们取的都是商和余数,于是我们猜想用乘法来完成这一操作,因为通常乘法操作比除法快得多。在VC++编译器中已经专门为此做了很好的优化,但我依然执著于去研究一下。先说明一下这里要使用的一些运算符号:
C++中计算大数阶乘的较短代码
#include using namespace std; int main() { int a[100000]; int n; cout << "请输入您想要的阶乘数" << endl; cin >> n; int i = 1; //循环次数(n) int k = 0; //上一次的第几位数(j) a[0] = 1; int
关于大数(阶乘的位数)三种方法
方法一;套用公式 log10(1)+log10(2)+···+long10(n)取整后加1  java代码如下 package ACM; import java.util.Scanner; import java.math.*; public class Main{  public static void main(String []args){   Scanner
组合数,阶乘求法
复杂度:O(n^2) C[i][j]即为C(i,j); #include &lt;bits/stdc++.h&gt; using namespace std; const int MOD = 1e9+7; const int maxn = 1e3; typedef long long ll; int n,k; ll C[maxn][maxn]; int main() { n = 1...
组合数计算快速幂)
快速幂更高效。。。 #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll mod=1000000009; const ll maxn=100; ll c[12345
算法竞赛入门经典】阶乘的精确值
算法竞赛入门经典】阶乘的精确值问题描述输入不超过1000的正整数n,输出n! = 1x2x3x4x···xn的精确结果. 样例输入:5 样例输出:120 算法分析我们需要解决两个问题: 怎么保存结果 乘法过程是怎样的 对于第一个问题:因为1000的阶乘是无法用整数保存的,用double也一样,它的位数会高达两千多位,保存阶乘值的位数,我们只能使用数组,这里使用一个大小为3000的数组;对
阶乘和(高精度算法
(对于自然数N的阶乘,当N比较小时,可以32位整数int范围内准确表示 。例如12!=479001600<2147483647(231-1)  而20!=2432902008176640000<9223372036854775807(263-1)可以在64位整数long long int范围内准确表示 ,但是 N取值更大时,N!只能使用浮点数计算,从而产生误差 ) 题目描述 已知正整数N(N...
文件hash算法,对大文件进行hash计算
文件hash算法,对大文件进行hash计算,并可以返回base64编码.文件hash算法,对大文件进行hash计算,并可以返回base64编码.
快速开平方根算法
人们很早就在Quake3源代码中发现了类似如下的C代码,它可以快速的求1/sqrt(x),在3D图形向量计算方面应用很广 float invSqrt(float x) { float xhalf = 0.5 * x; int i = *(int*)&x; // get bits for floating value i = 0x5f3759df - (i >> 1); // gives
解题笔记-n!(高精度阶乘(n<10000))
题面输入一个数n(1 < n < 10000),输出这个数的阶乘FormatInput10Output3628800题解这是一道较为基本的高精题目,因为数据到了1e5,所以不能用正常做法(如递归、~~递推~~、~~pianfen~~了)。但这道高精较为基本,所以在此不详尽描述了。 真不会的这里有基础级[传送门]标程#include #include #i
2015年华为面试用C语言编写一个求大数字阶乘算法的题目
之前看到过很多网上发的华为面试题 ,大家都很崇拜的样子。偶然一次机会接到华为的面试,就去挑战和感受了一下,最后一个大题是求大数字的阶乘算法的问题: 所以说做软件的开发的人,关键的时候还是看智商的。由于之前没有见过这样的算法,我没有做出来,回来百度了一下。结果如下: void main() { static int a[5000]   = {0, 1};//第一位不用 int i,
大数阶乘取模
水了90分。。。 如果不会正解的话,直接暴力拿分,无脑暴力可以拿到90分 正解分块打表暴力就是直接求阶乘然后取模。。。 加一个比较有用的特判:如果n>=p,那么n的阶乘的因子中一定有p,n的阶乘膜p一定等于0#include #include using namespace std; long long n,p; int js(int n) { l
蓝桥杯基础练习 阶乘计算高精度方法)
基础练习 阶乘计算   问题描述   输入一个正整数n,输出n!的值。   其中n!=1*2*3*…*n。 算法描述   n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。   将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
【c++程序】求一个数的阶乘n!
#include using namespace std; long fact(int n); int main() { int n; long y; cin>>n; y=fact(n); cout<<<<
C语言计算一个整数N的阶乘
#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;math.h&gt;int main(){    int i,N;    int sum = 1;    scanf("%d",&amp;N);    if(0 &lt;= N &lt;= 12)    {        for(i = N; i&gt;0; i--)    ...
ACM-大数阶乘
描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入输入一个整数m(0输出输出m的阶乘,并在输出结束之后输入一个换行符样例输入 50 样例输出 30414093201713378043612608166064768844377641568960512000000000000 代码:   01.#include 02.#in
最快的计算2的N次方
1.移位运算 2<<1
蓝桥杯练习系统--阶乘计算
问题描述   输入一个正整数n,输出n!的值。   其中n!=1*2*3*…*n。 算法描述   n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。   将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。   首先将a设为1,然后乘2,乘3,当乘到n时,即
快速求平方根算法
对于一个整数求解其平方根可以使用“二分法”和“牛顿法”。 二分法算法: 给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下: 1 确定区间[a,b],验证f(a)·f(b) 2 求区间(a,b)的中点c. 3 计算f(c). (1) 若f(c)=0,则c就是函数的零点; (2) 若f(a)·f(c) (3) 若f(c)·f(b) (4) 判断是否达到精确度ξ:即若|a-
java程序计算两个大整数相乘
方法1 :用两个字符串保存输入的大整数,然后用第二个字符串的每一位去乘第一个字符串的数字值,最后将每次的结果错位相加即可。时间复杂度高O(n^2) 方法2:将两个大整数X,Y每次分割成两半,第一个分割成AB,第二个分割成CD。所以最后结果XY=(A*10^n/2 +B)(C*10^m/2+D);进行分解可得 XY=AC*10^(n+m)/2+AD*10^n/2 +BC*10^m/2 +BD;
高精度 求1000以内阶乘 (初学)C++版
问题描述  输入一个正整数n,输出n!的值。  其中n!=1*2*3*…*n。算法描述  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。输入格式...
超大整数开方&&灯
引用:点击打开链接 T4607 灯·重回江湖收五杀【提高】 题目描述 N盏灯和N个人,最开始N盏灯都是灭的,第i个人会按下第ki(ki≤N且k>0)的开关,试问N个人操作之后有多少盏灯是亮着的。 输入输出格式 输入格式: 输入共一个正整数N 输出格式: 输出共一个正整数,即N个人操作之后亮着的灯的数量。 输入输出样例 输入样例#1: 2 输出样例#1: 1 说明 te
大数运算(6)——大数阶乘(求位数)
对于比较大的数,求这个数的阶乘的位数的方法: 第一种: lg(N!)=[lg(N*(N-1)*(N-2)*......*3*2*1)]+1          =[lgN+lg(N-1)+lg(N-2)+......+lg3+lg2+lg1]+1 用C语言实现: #include #include int main() { int n; double sum=0; scanf("%d
整数乘法的5种方法
   模拟小学乘法:最简单的乘法竖式手算的累加型; 分治乘法:最简单的是Karatsuba乘法,一般化以后有Toom-Cook乘法; 快速傅里叶变换FFT:(为了避免精度问题,可以改用快速数论变换FNTT),时间复杂度O(N lgN lglgN)。具体可参照Schönhage–Strassen algorithm; 中国剩余定理:把每个数分解到一些互素的模上,然后每个同余方程对应乘起来就行...
C++的擂台法排序问题。
今天学生学习到了擂台法排序。擂台法排序比前一种数组排序的优越处在于,它简化了计算机的运算过程。以擂台的理念将每一次对比中选出最小的一个进行标记,然后放在最初而并不是像数组一次一次的选出来,一次一次的放到最初或是最末。 比如: #include void main() {  int c,min;//与单纯数组相比,多定义一个字符变量。 int a[5]={6,5,7,4,2};//定义
JavaScript中实现一个整数阶乘的方法
计算一个整数阶乘,如果用字母n来代表一个整数阶乘代表着所有小于或等于n的整数的乘积。阶乘通常简写成 n!     例如: 5! = 1 * 2 * 3 * 4 * 5 = 120(1)第一种方法使用for循环来实现阶乘的效果function factorialize(num) { var result = 1; for(var i = 1;i&lt;=num;i++){ res...
我们是很有底线的