首页 > 解决方案 > 关于 SIGTSTP 错误和无休止的输入

问题描述

下面的代码给出了 SIGTSTP,但我无法找到故障。原始问题链接是:https ://codeforces.com/contest/102/problem/B 。请帮忙。

 #include<bits/stdc++.h>
 using namespace std;

  int main()
  {
    int x,sum=0,count=0;
    string s; cin>>s;


    while(s.length()>1){

      for(int i=0;i<s.length();i++){
        x=s[i]-'0';
        sum+=x;
      }
      s=std::to_string(sum);
      count++;
    }


    cout<<count;      
    return 0;
  }

标签: c++c++11stlc++14c++17

解决方案


假设输入是19.

外循环的第一次迭代将sum等于10,并设置s"10"

外循环的第二次迭代(when sis "10")将添加 1(and 0) 到sum,使其等于11,因此当内循环结束时s变为"11"

外循环的第三次迭代会将2( 1and 1) 添加到sum, so sumbecome13sbecome "13"

以此类推,直到永远。

的长度s永远不会等于(或小于)1。这会导致无限循环。由于超时,这可能会被在线系统停止。

我还没有阅读问题描述(将来请将其包含在问题中,以使您的问题自成一体)但是您的算法是错误的,您需要重新考虑您的解决方案。很可能您应该在内循环之前重置sum(即sum = 0;),或者更好地在内循环内定义它:

int x,count=0;
string s; cin>>s;

while(s.length()>1){
  int sum = 0;

  for(int i=0;i<s.length();i++){
    x=s[i]-'0';
    sum+=x;
  }
  s=std::to_string(sum);
  count++;
}

[我通过对代码进行橡皮鸭调试来对此进行推理]


推荐阅读