我试图找到一个数字中所有数字的乘积,我将其存储为一个字符串(由于int和长度限制).
所以数字看起来像这样:
final String number = "1234567898765432123......etc"
如果我使用此代码,它的工作原理:
product *= number.charAt(i + j) - '0';
如果我删除'0'则不会.
我从另一个在线资源获得此代码.有人可以解释'0'的作用吗?
Ascii字符实际上是数字.而0 .. 9
数字是十进制48(十六进制的0x30)开始的数字.
'0' is 48 '1' is 49 ... '9' is 57
因此,要获得任何字符数字的值,您可以删除'0',即48.
'1' - '0' => 1 49 - 48 => 1
如果你不删除'0'(48),总和将超过48 * numberOfDigits
.
请参阅ascii表以查找其中的数字.
请注意,这'0'
是字符0
,而不是"0"
包含字符的字符串'0'
.
我们来看看ASCII图表
您可以看到Dec值为'0' - >'9'
charAt()方法只获取字符,在计算时自动转换为int值.
'0' -> 48 '1' -> 49 ... '9' -> 57
在减去'0'之后:
'0' - '0' -> 48 - 48 = 0 '1' - '0' -> 49 - 48 = 1 ... '9' - '0' -> 57 - 48 = 9
毕竟,'n' - '0'= n,n是数字字符