以下是代码的link,我也在下面发布了它。
#include<math.h>
void pentagon(int n)
{
int k,p[10],a[10],b[10];
if(n<0)
p[n]=0;
if(n==0)
p[n]=1;
for(k=1;k<n;k++)
{
a[k]=((3*pow(k,2))-k)/2;
b[k]=((3*pow(k,2))+k)/2;
}
for(k=1;k<n;k++)
{
p[n]=pow(-1,k-1)(pentagon(n-a[k])+pentagon(n-b[k]));
}
cout<<p[n];
}
int main()
{
pentagon(4);
return(0);
}
我收到以下错误:
在函数'void pentagon(int)'中:
第11行:错误:调用重载'pow(int&amp;,int)'是不明确的
由于-Wfatal-errors
答案 0 :(得分:2)
将2
替换为2.0
作为pow
的第二个参数(第11,12行)。
答案 1 :(得分:1)
收集并更正所有错误(和警告)会产生以下代码(codepad)。我对改变了什么做了一些评论。
#include <math.h>
#include <iostream> // Some compilers will complain if missing
using namespace std; // Some compilers will complain if missing
// returns int instead of being void
int pentagon(int n)
{
int k,p[10],a[10],b[10];
// recursion end - we want to jump out here right away
if(n<0) return 0;
if(n==0) return 1;
for(k=1;k<n;k++)
{
a[k]=((3*(int)pow(k,2.0))-k)/2; // pow needs double as second argument
b[k]=((3*(int)pow(k,2.0))+k)/2; // and returns double
}
for(k=1;k<n;k++)
{
// pow casting and double as second argument, multiplication with pentagon
p[n]=(int)pow(-1,k-1.0)*(pentagon(n-a[k])+pentagon(n-b[k]));
}
cout<<p[n]<<endl; // cleaner output
return p[n]; // return the calculated value
}
int main()
{
pentagon(4);
return(0);
}
但我猜基础算法仍然是错误的,因为输出是:
-1084535312
-1084535311
1074838088
0
3
4
0
答案 2 :(得分:0)
以下是我发现的一些错误或改进:
添加了iostream&amp;使用命名空间std:
#include <cmath>
#include <iostream>
using namespace std;
将pow(k,2)
更改为k * k:
a[k]=((3*(k*k))-k)/2;
b[k]=((3*(k * k))+k)/2;
将乘法符号添加到p[n]
赋值:
p[n] = pow(-1.0,k-1) * (pentagon(n-a[k]) + pentagon(n-b[k]));
pentagon
方法需要返回一个值才能在上面的语句中使用它。
答案 3 :(得分:0)
你错过了等式的求和部分。 请参阅http://en.wikipedia.org/wiki/Pentagonal_number_theorem。
您的pentagon
功能一次只计算一个字词。没有代码可以汇总所有条款。