2

我对 getint 程序的一部分有疑问。

当我们得到这部分时:

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

首先它转换c成它的实数值,然后它把里面的数据乘以pn10。为什么它把 10 和里面的数据相乘pn

问候,

4

3 回答 3

2

十进制表示法中的任何数字都可以表示为多项式10

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

从左边读取并乘以10确保每个数字最终乘以 的正确幂10。这只是霍纳斯规则的应用,真的。

于 2012-10-11T17:05:44.517 回答
1

该功能一次读取一位,从左侧开始。因此,如果它正在读取,比如说,12那么首先它得到c == '1'and *pn == 0,它添加1*pn并且现在*pn1。对于每个连续的数字,它将现有值乘以十(*pnis now 10)并添加数字(*pnis now 12)。这样,它一次读取一个数字并以正确的整数结束。

于 2012-10-11T17:04:26.497 回答
1

它从左侧开始,并在向右移动时遇到的每个连续数字乘以 10。

以字符串“234”为例:

  1. 在第一次迭代中,取 2。将 0 ( *pn) 乘以 10,加 2,得到 2。
  2. 在第二次迭代中,取 3。将 2 ( *pn) 乘以 10,加 3,得到 23。
  3. 在第三次迭代中,取 4。将 23 ( *pn) 乘以 10,再加上 4,得到 234。
于 2012-10-11T17:03:00.220 回答