0

a が回文かどうかをテストするコンパイラとして C++ と Xcode を使用して関数をコーディングしようとしています。引数が「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常に long に変換する場合は、使用する意味がほとんどありません。

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が を与えることに注意してくださいdouble。したがって、減算も を与え、そのためのコンストラクターはありませんdoubleBigInteger

于 2013-02-12T19:13:19.780 に答える