0

C のコードに問題があります。数値が正しく変換されません。これは、与えられた数値を基数の異なる別の数値に変換するユークリッド アルゴリズムです。「精度」はコンマの後の桁数です。

static char* euclid(float number, int base, int precision)
{
    //create a buffer for holding the resulting string
    char* resultString = createBuffer(number, base, precision);
    int numbTemp;
    int numbDiv;

    float maxExponent  = 0;

    while (number >= pow((float)base, (float)maxExponent)) {
       maxExponent++;
    }

    maxExponent--;

   if (maxExponent < 0) {

       maxExponent = 0;
   }

   while (maxExponent >= 0) {
     numbDiv = number / pow(base, maxExponent);
     *resultString += converIntToChar(numbDiv);
     numbTemp = numbDiv * pow(base, maxExponent);
     number -= numbTemp;
     maxExponent--;
     if(maxExponent < 0 && precision >0) {
         *resultString += ",";
         while(precision > 0) {
             numbDiv = number / pow(base, maxExponent);
             numbTemp = numbDiv * pow(base, maxExponent);
             *resultString += convertIntToChar(numbDiv);
             number = number - numbTemp;
             maxExponent--;
             precision--;
         }
     }
  }
  return resultString;
}

数値を文字に変換:

static char convertIntToChar(int number) {
     if (0 <= number && 10 > number) {
          return number + '0';
     }
     else if (16 > number) {
          return number - 10 + 'A';
     }
     else {
          return '\0';
     }
}

「数値」の入力は常に 10 を底とする数値です。たとえば 170 で試してみた結果、170 (これは 10 を底とする) を 16 を底とする数値として返す必要がありました。ああ。しかし、結果として得られるのは�. 問題を見つけるのを手伝ってくれませんか。その上、私はLinuxを使用しています。だから私はgccコンパイラを使います。また、ホーナーの方法を実装しようとしていますが、上記と同じ結果が得られます (�) ホーナーの方法のコード。

static char* horner(float number, int base, int precision) {

    // create a buffer for holding the resulting string.
    char* resultString = createBuffer(number, base, precision);
    int numbDiv = 0;
    int numbTemp = 0;
    int numbConv = 0;

    do {
        numbDiv = number / base;
        numbTemp = numbDiv * base;
        numbConv = number - numbTemp;
        number = numbDiv;
        *resultString += convertIntToChar(numbConv);
    } while (number != 0);

    return resultString;
 }

よろしく萩

4

2 に答える 2