【发布时间】:2021-03-18 07:14:30
【问题描述】:
我无法理解此代码。目标是递归地添加一个数字中所有数字的总和,直到只有一位数字
long long superDigit(string n, int k) {
if (n.size() == 1)
return stoi(n);
long long sum = 0;
for (int i = 0 ; i < n.size() ; i++)
sum += (n[i] - '0') * k;
return superDigit(to_string(sum),1);
}
但是,我不明白这一行
sum += (n[i] - '0') * k;
n 是一个字符串 k 是一个整数 这种乘法的期望是什么? 此外,我在字符串上测试了操作符,但我不明白它是如何工作的。
【问题讨论】:
-
唯一知道的方法是询问编写此代码的人。只有他们自己知道其中的原因。至于减法,看看你在尝试
'5'-'0'或'7'-'0'时会得到什么,减法的原因应该会很明显。 -
(n[i] - '0')应该是从 0 到 9 的整数,如果 n[i] 介于 '0' 和 '9' 之间。请注意,“0”不等于 0。
标签: c++ string operator-keyword