getintプログラムの一部について質問があります。
この部分を入手したとき:
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
最初にc実際の数値に変換し、次に内部のデータにpn10を掛けます。なぜ10に内部のデータを掛けるのpnですか?
よろしく、
ケン
getintプログラムの一部について質問があります。
この部分を入手したとき:
for(*pn = 0; isdigit(c); c = getch())
*pn = 10 * *pn + (c - '0');
最初にc実際の数値に変換し、次に内部のデータにpn10を掛けます。なぜ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桁ずつ読み取り、正しい整数になります。