2

getintプログラムの一部について質問があります。

この部分を入手したとき:

for(*pn = 0; isdigit(c); c = getch())
    *pn = 10 * *pn + (c - '0');

最初にc実際の数値に変換し、次に内部のデータにpn10を掛けます。なぜ10に内部のデータを掛けるのpnですか?

よろしく、

ケン

4

3 に答える 3

2

10進表記の任意の数は、次の多項式として表すことができます。10

234 = 2*10^2 + 3*10 + 4

左から読み取り、乗算すると、10各桁が正しい累乗を乗算することになります10。本当に、それはホーナーズルールの単なる適用です。

于 2012-10-11T17:05:44.517 に答える
1

それは左から始まり、右に移動するときに遭遇する連続する数字ごとに10を掛けます。

たとえば、文字列「234」を考えてみましょう。

  1. 最初の反復で、2を取ります。0(*pn)に10を掛け、2を足すと、2が得られます。
  2. 2回目の反復では、3を取ります。2(*pn)に10を掛け、3を足すと、23になります。
  3. 3回目の反復で、4を取ります。23(*pn)に10を掛け、4を足すと、234になります。
于 2012-10-11T17:03:00.220 に答える
1

この関数は、左から1桁ずつ読み取ります。したがって、たとえば、を読んでいる場合12、最初に取得c == '1'して*pn == 0、に追加1*pn、現在*pn1です。連続する数字ごとに、既存の値に10を掛けて(*pn現在は10)、数字を追加します(*pn現在は12)。このようにして、一度に1桁ずつ読み取り、正しい整数になります。

于 2012-10-11T17:04:26.497 に答える