10 如何分隔 n = 10 * n + (s[i] - '0') 中的数字?
How does 10 separate the digits in n = 10 * n + (s[i] - '0')?
此函数将一串数字转换为其等效的数字:
int atoi(char s[])
{
int i, n;
n = 0;
for ( i = 0 ; s[i] >= '0' && s[i] <= '9' ; ++i )
{
n = 10 * n + (s[i] - '0');
}
return n;
}
我的问题是关于这一行的 -> n = 10 * n + (s[i] - '0');
特别是这部分10 * n
。我不明白 10 影响执行的方式。如果我删除它,表达式只是将数字相加。不明白10乘以0是怎么把数字分开的
如果你有一个数字,例如 1234
那么它可以像表达式的结果一样获得
( ( ( ( 0 ) * 10 + 1 ) * 10 + 2 ) * 10 + 3 ) * 10 + 4
如果数字存储为字符符号,例如“3”,那么要获得数字 3
,您可以编写 '3' - '0'
.
请注意,当传递的字符串包含负数或数字以符号'+'开头时,显示的函数将不起作用。
它的参数也应该用限定符 const
声明,因为传递的字符串在函数中没有改变。
int atoi( const char s[] );
考虑数字 1234。它由数字 1、2、3 和 4 组成。如果您按此顺序收到这些数字,则可以逐步构建原始数字:
n = 1
n = 1 * 10 + 2 = 12
n = 12 * 10 + 3 = 123
n = 123 * 10 + 4 = 1234
将其转化为一个等式:
n = ((((1 * 10) + 2) * 10) + 3) * 10 + 4
= ((1 * 10 * 10 + 2 * 10) + 3) * 10 + 4
= 1 * 10 * 10 * 10 + 2 * 10 * 10 + 3 * 10 + 4
= 1 * 1000 + 2 * 100 + 3 * 10 + 4
= 1000 + 200 + 30 + 4
= 1234
所以第一个数字比后面的数字乘以更多的 10。它只是通过一次乘以一个来分配 10 的次方。
正如我刚刚在 中所写的那样,如果我让你把数字 3
和 4
放在一起形成一个新数字,你可以做 10 × 3 + 4 = 34
,如果我让你把数字 12
和 34
拼在一起形成一个新数字,你可以做 100 × 12 + 34 = 1234
.
乘以 10 相当于在右边添加一个 0 并将所有内容向左移动一个数字:3 × 10 = 30
。类似地,乘以 100 相当于在右边添加两个 0 并将所有内容向左移动两位数:12 × 100 = 1200
.
在基数 10 中,每增加一个数字,左边数字的值就会增加 10 倍。
此函数将一串数字转换为其等效的数字:
int atoi(char s[])
{
int i, n;
n = 0;
for ( i = 0 ; s[i] >= '0' && s[i] <= '9' ; ++i )
{
n = 10 * n + (s[i] - '0');
}
return n;
}
我的问题是关于这一行的 -> n = 10 * n + (s[i] - '0');
特别是这部分10 * n
。我不明白 10 影响执行的方式。如果我删除它,表达式只是将数字相加。不明白10乘以0是怎么把数字分开的
如果你有一个数字,例如 1234
那么它可以像表达式的结果一样获得
( ( ( ( 0 ) * 10 + 1 ) * 10 + 2 ) * 10 + 3 ) * 10 + 4
如果数字存储为字符符号,例如“3”,那么要获得数字 3
,您可以编写 '3' - '0'
.
请注意,当传递的字符串包含负数或数字以符号'+'开头时,显示的函数将不起作用。
它的参数也应该用限定符 const
声明,因为传递的字符串在函数中没有改变。
int atoi( const char s[] );
考虑数字 1234。它由数字 1、2、3 和 4 组成。如果您按此顺序收到这些数字,则可以逐步构建原始数字:
n = 1
n = 1 * 10 + 2 = 12
n = 12 * 10 + 3 = 123
n = 123 * 10 + 4 = 1234
将其转化为一个等式:
n = ((((1 * 10) + 2) * 10) + 3) * 10 + 4
= ((1 * 10 * 10 + 2 * 10) + 3) * 10 + 4
= 1 * 10 * 10 * 10 + 2 * 10 * 10 + 3 * 10 + 4
= 1 * 1000 + 2 * 100 + 3 * 10 + 4
= 1000 + 200 + 30 + 4
= 1234
所以第一个数字比后面的数字乘以更多的 10。它只是通过一次乘以一个来分配 10 的次方。
正如我刚刚在 3
和 4
放在一起形成一个新数字,你可以做 10 × 3 + 4 = 34
,如果我让你把数字 12
和 34
拼在一起形成一个新数字,你可以做 100 × 12 + 34 = 1234
.
乘以 10 相当于在右边添加一个 0 并将所有内容向左移动一个数字:3 × 10 = 30
。类似地,乘以 100 相当于在右边添加两个 0 并将所有内容向左移动两位数:12 × 100 = 1200
.
在基数 10 中,每增加一个数字,左边数字的值就会增加 10 倍。