getint()函数乘以10?

时间:2012-10-11 17:01:07

标签: c

我对getint计划的一部分有疑问。

当我们得到这个部分时:

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

首先,它将c转换为实际数值,然后将pn内的数据与10相乘。 为什么它与pn内的数据相乘10?

此致

3 个答案:

答案 0 :(得分:2)

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

中的多项式
234 = 2*10^2 + 3*10 + 4

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

答案 1 :(得分:1)

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

以字符串“234”为例:

  1. 在第一次迭代中,取2.将0(*pn)乘以10,加2,得到2.
  2. 在第二次迭代中,取3.将2(*pn)乘以10,加3,得到23。
  3. 在第三次迭代中,取4.将23(*pn)乘以10,加4,得到234。

答案 2 :(得分:1)

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