1

ですので、少しでも参考になれば幸いです。radix(base) を受け取る関数があり、 getchar() を使用すると、指定された基数から整数表現に変換する数値が取得されます。

指定された唯一の引数は基数であり、 getchar() はコマンドラインから数値表現を取得します。

だから私が合格した場合

str2int 16
input a number: 3c

(16^1*3) + (16^0*12) = 48 + 12 = 60を出力する必要があります。

数学と、基数を変換するさまざまな方法を完全に理解していますが、何かをコーディングする方法がわかりません。少なくとも私にとっては、数学は常にコードよりもはるかに簡単です。

別の計算方法は次のとおりです。 (702) base 15 = 15*7 + 0 = 105; 15*105 + 2 = 1577

getchar() だけを使用して C でこれを表現する方法がわかりませんか? 数学関数を使用せずに行うことは可能ですか?

4

1 に答える 1

0

char桁がなくなるか、それ以上必要なくなるまで、一度に 1 つずつ取得し続けます。

unsigned shparkison(unsigned base) {
  unsigned sum = 0;
  int ch;
  while ((ch = getchar()) != EOF) {
    // one could instead look up the toupper(value) in an array "0123...ABC...Z"; 
    // Following assumes ASCII
    if (isdigit(ch)) ch -= '0';
    else if (islower(ch)) ch -= 'A' - 10;
    else if (isupper(ch)) ch -= 'a' - 10;
    else {
      break; // Not a digit
    }
    if (ch >= base) {
      break; // Digit too high
    }
    unsigned sum_old = sum;
    sum *= base;
    sum += ch;
    if (sum < sum_old) {
      sum = sum_old;
      break; // Overflow
    }
  }
  ungetc(ch, stdin);
  return sum;
}
于 2013-09-17T01:01:20.023 に答える