0

我正在尝试使用 C++ 和 Xcode 作为编译器编写一个函数,该编译器将测试 a 是否为回文。当参数是“C++ 天生”类型(例如 int、long、double 等)时,代码运行良好,但我想将该函数用于更大的值。所以我使用了BigInteger类型的参数。但是编译器给出了一个错误就行了

 BigInteger q = x - floor(x.toLong()/10)*10

这么说Conversion from 'double' to 'const BigInteger' is ambiguous。这是整个代码:

#include <iostream>
#include "BigInteger.hh"

using namespace std;
bool isPalindrom(BigInteger x){
long ch = ceil(log10(x.toUnsignedLong())), n[ch];
//    cout << floor(log10(x)) + 1 << endl;
for (int i = 0; i <= ch; i++){
    BigInteger q = x - floor(x.toLong()/10)*10;
    n[i] = q.toInt();
    //        cout << n[i] << endl;
    x /= 10;
}

for (long i = 0; i <= ceil(ch); i++){
    if (n[i] != n[ch - i]){
        return false;
    }
}
return true;
}

我怎么解决这个问题?

4

2 回答 2

1

BigInteger如果您要一直转换为多头,那么使用它就没有什么意义了。

您可以仅使用操作来编写该内容BigInteger,其方式与使用原始整数完全相同:

bool isPalindrome(BigInteger x){
   std::vector<int> digits;
   while (x > 0)
   {
      digits.push_back((x % 10).toInt());
      x /= 10;
   }

   size_t sz = digits.size();
   for (size_t i = 0; i < sz; i++){
      if (digits[i] != digits[sz - i - 1]){
         return false;
      }
   }
   return true;
}
于 2013-02-12T21:30:22.840 回答
0

也许

  BigInteger q (static_cast<long>(x - floor(x.toLong()/10)*10));

可能会使编译器更快乐。查看BigInteger.hh中的公共构造函数。请注意,floor给出 a double,因此减法也给出 a double,并且BigInteger没有构造函数。

于 2013-02-12T19:13:19.780 回答