关于 SIGTSTP 错误和无休止的输入

Regarding SIGTSTP error and unending input

本文关键字:输入 无休止 SIGTSTP 错误 关于      更新时间:2023-10-16

下面的代码给出了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;
}

假设输入是19

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

外循环的第二次迭代(当s"10"时(将1(和0(添加到sum,使其等于11,所以当内循环结束时,s变得"11"

外循环的第三次迭代会将2(11(添加到sum,因此sum变得13s变得"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++;
}

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