c++ - 关于 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;
}
解决方案
假设输入是19
.
外循环的第一次迭代将sum
等于10
,并设置s
为"10"
。
外循环的第二次迭代(when s
is "10"
)将添加 1
(and 0
) 到sum
,使其等于11
,因此当内循环结束时s
变为"11"
。
外循环的第三次迭代会将2
( 1
and 1
) 添加到sum
, so sum
become13
和s
become "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++;
}
[我通过对代码进行橡皮鸭调试来对此进行推理]
推荐阅读
- kotlin - 将snackbar移到底部导航栏jetpack compose上方
- c++ - 指向结构的指针向量
- ms-access - 两个表列合并为一个查询
- apache-spark - 如何引发异常以退出 Synapse Apache Spark 笔记本
- c++ - 条件变量 + 互斥体 + pthreads 的 C++ 生产者消费者问题
- google-analytics - 即使在页面重新加载后如何跟踪 GTM 事件
- javascript - 如何解决reactjs中的重载错误
- python - Django:POST 和 GET 请求并在模板上呈现
- react-native - 如何知道 react native 的每个组件的屏幕空闲?
- cypress - 测试按钮的状态