getintプログラムの一部について質問があります。
この部分を入手したとき:
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
最初にc
実際の数値に変換し、次に内部のデータにpn
10を掛けます。なぜ10に内部のデータを掛けるのpn
ですか?
よろしく、
ケン
getintプログラムの一部について質問があります。
この部分を入手したとき:
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
最初にc
実際の数値に変換し、次に内部のデータにpn
10を掛けます。なぜ10に内部のデータを掛けるのpn
ですか?
よろしく、
ケン
10進表記の任意の数は、次の多項式として表すことができます。10
234 = 2*10^2 + 3*10 + 4
左から読み取り、乗算すると、10
各桁が正しい累乗を乗算することになります10
。本当に、それはホーナーズルールの単なる適用です。
それは左から始まり、右に移動するときに遭遇する連続する数字ごとに10を掛けます。
たとえば、文字列「234」を考えてみましょう。
*pn
)に10を掛け、2を足すと、2が得られます。*pn
)に10を掛け、3を足すと、23になります。*pn
)に10を掛け、4を足すと、234になります。この関数は、左から1桁ずつ読み取ります。したがって、たとえば、を読んでいる場合12
、最初に取得c == '1'
して*pn == 0
、に追加1
し*pn
、現在*pn
は1
です。連続する数字ごとに、既存の値に10を掛けて(*pn
現在は10
)、数字を追加します(*pn
現在は12
)。このようにして、一度に1桁ずつ読み取り、正しい整数になります。