这是获得给定两个数的乘积的模10(%10)的问题。因为数字太大,所以它们被称为字符串。
解决方案将是,
int modulo10(String a, String b) {
return (a.charAt(a.length()-1)-48)*(b.charAt(b.length()-1)-48)%10;
}
我找到了其他人的解决方案。
int modulo10(String a, String b) {
return ~-~a.charAt(a.length()-1)*~-~b.charAt(b.length()-1)%10;
}
有人可以帮助我理解它将如何提供所需的正确输出。
答案 0 :(得分:4)
如果你把它煮沸,你问的是为什么这样做:
int modulo10(char ca, char cb) {
return (~-~ca * ~-~cb) % 10;
}
假设用每个字符串的最后一个字符调用它。
考虑'0'
{/ 1>} ~-~c
映射到的内容:
'0' == 48
~c => ~48 == -49
-~c => -(-49) == 49
~-~c => ~49 == -50
同样适用于'1'
:
'1' == 49
~c => ~49 == -50
-~c => -(-50) == 50
~-~c => ~50 == -51
等。因此,字符0-9
将映射到整数-50, -51, ... -59
等。
那么,你只是把这些映射数中的两个加在一起 - 两者都是负数,所以结果是正的;取模10给出了“正确”的答案。
这看起来像是一个“聪明的**”技巧,对任何阅读它的人来说都是完全不清楚的。
您的方法 - 除了您可以使用'0'
而不是文字48
之外的事实 - 更容易理解,而且可能更有效。