1

这是代码的链接,我也在下面发布了它。

 #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&,int)'的调用是由于-Wfatal-errors而终止的模棱两可的编译

4

4 回答 4

2

替换2为(line 11, 12)2.0的第二个参数。pow

另见:http ://www.cplusplus.com/reference/clibrary/cmath/pow/

于 2011-03-11T19:18:14.030 回答
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
于 2011-03-11T19:29:53.593 回答
0

以下是我发现的一些错误或改进:

添加了 iostream 和使用命名空间 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方法需要返回一个值才能在上述语句中使用它。

于 2011-03-11T19:45:11.327 回答
0

你错过了等式的求和部分。请参阅http://en.wikipedia.org/wiki/Pentagonal_number_theorem

您的pentagon函数一次只计算一个术语。没有代码可以总结所有条款。

于 2011-03-11T20:09:07.930 回答