【问题标题】:Substraction string on string and multiply by int role字符串上的减法字符串并乘以 int 角色
【发布时间】: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


【解决方案1】:

每个字符都有一个数值。您可以在ASCII Table 上找到这些值。字符 0-9 被放置在 ASCII 表上的一个连续块中,0 在 48 和 9 和 57 处。所以,当你做一个 char 减去 '0' 时,你会得到它与'0' 的距离有多远ASCII 表,有效地将字符转换为其对应的数字。 '0' - '0' 是 0,因为它们是同一个字符,'1' - '0' 是 1,因为 1 紧挨着 0 (49 - 48),'2' - '0' 是 2,因为它距离 2 (50 - 48 = 2),等等开。

【讨论】:

  • 所以代替 (n[i] - '0') 我可以简单地写 int(n[i]) ?
  • 这不是python; int 不是函数,并且转换的格式为 (int) n[i],而不是 int(n[i])。这会将字符转换为其 ascii 值,这意味着 (int) '0' 是 48,(int) '1' 是 49,依此类推,这不是您想要的。
猜你喜欢
  • 2012-08-04
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 2020-03-26
  • 2017-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
相关资源
最近更新 更多