数字超出界限了,唉搞了这么久终于搞出来
只要把类型变一下就行,其他不用改
换成float或者double类型,最好是double,因为阶乘这东西可是天文数字啊
望采纳
# include <stdioh>
int n;
void main()
{
float fac (float a,float b);
float x,y;
float sum;
printf("please input the step number:");
scanf("%d",&n);
sum=fac(x,y);
printf("%f\n",sum);
}
float fac (float a,float b)
{
float comb(float j);
float w=0;
for (a=0;a<=n;a++)
{
for (b=0;b<=n/2;b++)
if (a+2b==n)
{
w+=comb(a+b)/(comb(a)comb(b));
}
}
return w;
}
float comb (float j)
{
if (0==j) return 1;
else return (jcomb(j-1));
}
简单的dp问题:
#include
int step[2048];
int p = step;
void foo(int n)
{
if(n > 0) {
if(n > 1) {
p++ = 2;
foo(n-2);
--p;
}
p++ = 1;
foo(n-1);
--p;
} else {
for(int k = step; k != p; ++k)
printf("%d ",k);
putchar('\n');
}
}
int main()
{
foo(5);
}
#include<iostream>
#include<string>
using namespace std;
const int num=10000;//这是数字位数最大值
int n,i,a[5001][num]={{0,0}};//注意,算出来的可都是倒着写的数字,下标是0的是最低位
int main()
{
char b[num];//做中间变量
int ctoi_array(char [num],int [num]);
char itoc_array(int [num],char [num]);
memset(b,0,sizeof(b));
cin >> n;
if(n==1){cout << 1;exit(0);}
if(n==0){cout << 0;exit(0);}
a[0][0]=1;
for(i=1;i<=n;i++)
if(i==1)a[i][0]=1;
else
{
int k=0;
itoc_array(a[i-1],b);
int len=strlen(b);
for(k=0;k<len;k++)
a[i][k]=a[i-1][k]+a[i-2][k];//各个位数相加
for(k=0;k<=len+2;k++)
if(a[i][k]>9)
{
a[i][k]-=10;
a[i][k+1]+=1;
}//进位
}
itoc_array(a[n],b);
cout << strrev(b);
return 0;
}
int ctoi_array(char a[num],int b[num])//字符数组转换成整形数组
{
int i=0;
for(;a[i]!='\0';i++)
b[i]=a[i]-'0';
return b;
}
char itoc_array(int a[num],char b[num])//整型数组转化成字符型数组
{
for(int i=num-1;a[i]==0;i--);
b[i+1]='\0';
for(;i>=0;i--)
b[i]=a[i]+'0';
return b;
}
递归实现。。。
重要的是理解这个逻辑,
第n布,走一步,即n-1,再求n-1个阶梯的走法,
走两步,即n-2,再求n-2个阶梯的走法,
以此,n级阶梯的走法是n-1个阶梯的走法与n-2个阶梯的走法的和。
public int GetStepNum(int n)
{
if(n<1) throw new Exception();
if(n==1) return 1;
if(n==2) return 2;
if(n>2)
return GetStepNum(n-1)+GetStepNum(n-2);
}
改了点,更有效率:
#include<stdioh>
main()
{int i;<br/> for(i=7;;i=i+7)<br/> if(i%3==2 && i%5==4 && i%6==5)<br/> {printf("%d\n",i);break;}
}
若以每步走两级则最后剩一级,若以每步走三级则剩两级,若以每步走四级则剩三级,若以每步走五级则剩四级,若以每步走六级则最后剩五级
那么整个级数可表示为(K654321-1)即(720K-1)(K为整数)
又若每步走七级“刚好不剩”所以还是7的倍数
可以简单的凑一下就得到了K的最小值是6
总级数是4319
以上就是关于c语言编程找错,上楼梯问题 一次上1格或2格的走法种类全部的内容,包括:c语言编程找错,上楼梯问题 一次上1格或2格的走法种类、爬楼梯问题--有n阶台阶,上楼可以一步上1阶,2阶,3阶,计算共有多少种不同的走法、C++ 数楼梯问题,一次只能过6个点 求大神帮忙等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)