【发布时间】:2013-02-05 20:17:47
【问题描述】:
我正在尝试解决Project Euler 的第 56 个问题,但在使用Big Integer Library 时遇到了一些麻烦。这是代码:
#include <iostream>
#include "BigInteger.hh"
#include <cmath>
using namespace std;
int digitSum(BigInteger x){
int num[(int)floor(log10(x))+2];
int n = 0;
BigInteger sum = 0;
while (x != 0){
sum += x - floor(x/10) * 10;
x = floor(x/10);
n++;
}
return sum.toInt();
}
int main(int argc, const char * argv[])
{
int max = 0;
for (int i = 1; i <= 100; i++){
for (int j = 1; j <= 100; j++){
cout << "i = %i, j = %i ",i,j;
if (digitSum(pow(i,j)) < max)
max = digitSum(pow(i,j));
}
}
cout << digitSum(pow(2,63));
return 0;
}
问题是,当我尝试构建时,编译器在使用 log10、floor 和 pow 函数的行上给出错误,指出它们已使用但未定义。当我评论 #include "BigInteger.hh" 行时,一切正常,但这次我当然不能使用 Big Integer 库。
为什么会出现这样的问题?如何解决?
【问题讨论】:
-
你必须链接一个库。
-
原因很简单,Big Integer 库没有为其 BigUnsigned 和 BigInteger 类定义函数
log10、floor或pow。要么自己编写,要么使用其他库。 -
嗯,好吧,我明白这一点,但仍然没有理由说这些函数是未定义的。我应该能够将它们与 C++ 整数一起使用。
-
您在 digitSum 函数中使用 BigInteger 参数调用
log10和floor。那显然行不通……
标签: c++ function shared-libraries static-libraries