找到第1500行帕斯卡三角形中的每个数字
Find each number in pascal triangle on 1500th row?
我刚刚问了另一个关于帕斯卡三角形的问题,关于求第1500行的和。我很高兴人们回答得这么快,但不幸的是,后来我意识到,我需要第1500排的每个号码。
在这里,我找到了一种简单的方法来计算帕斯卡三角形上的任何数字,但当我试图在代码中使用公式时,程序在启动时崩溃了。
#include"stdio.h"
int factorial(int);
int main()
{
int i=0;
for(i=0; i<1501; i++)
{
printf("%d n" , (factorial(1500)/factorial(1500-i))/factorial(i) );
}
}
int factorial(int x)
{
if(x<2)
return 1;
else
{
return x*factorial(x-1);
}
}
由于
binom(1500,750) = 722462892448930217028116073228485295944376343040546523665632913653613596406381727723198055046187955623124069093412562720869577867557610868874271130828359513282184417776042792372322074253393127328396528996120053749558122610911178218582669317535346728464707661495135518682519172221470420360910320792434869988224466647627642393919250205687942318888922893189087379790541907686956429837978631252775258630376332505697937034877619012586751274240109457111424
甚至超过了通常的CCD_ 1范围。
但有了这样一种类型,关系
binom(n,k+1) = binom(n,k)*(n-k)/(k+1)
允许一个简单、相对高效的实现:
bigint value = 1;
int numerator = 1500 + 1, denominator = 0;
for(; denominator <= 1500; --numerator, ++denominator, value = value*numerator/denominator)
{
output(value);
}
其中CCD_ 2是库提供的任何输出方法。
如果库不提供用于乘/除大整数和普通int
的重载,则需要调整value = value*numerator/denominator
部分。
对阶乘使用线性算法,以避免通过递归堆栈溢出:
int factorial(int x) {
if (x < 2) return 1;
int result = x;
while (--x) {
result *= x;
}
return result;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- 检查输入是否不是整数或数字
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 如何用数字处理log(0)
- 最高有效数字侧的第N位
- 如何获取一个数字的前3位
- 查找最接近的大于当前数字的数字的索引
- 找到两对数字,使它们的乘积的绝对差最小化
- 我想做一个彼此不同但重复出现的数字
- 将数字转换为字母(例如:123 转换为一二三)
- C++如何计算用户输入的数字中的偶数位数
- 如何在C++中确定文本文件中的元素是字符还是数字
- 以C++输出一个数字三角形
- 形成一个斐波那契三角形,使得每个数字是上面左对角线或右对角线上两个数字的总和
- 将数字表示为两个三角形数字的总和
- 我试图弄清楚如何使用给定数字反转我创建的三角形
- 找到第1500行帕斯卡三角形中的每个数字
- 确定给定数字 N 是否可以成为具有所有 3 个积分边的直角三角形的斜边的算法
- 用c++编写程序,生成一个带有星星的三角形,但结果总是差两个数字