Позволяет сказать, что ввод 19
.
Первая итерация внешнего l oop сделает sum
равным 10
и установит s
в "10"
.
Вторая итерация внешнего l oop (когда s
равно "10"
) добавляет 1
(и 0
) к sum
, делая его равным до 11
, поэтому, когда внутренние циклы заканчиваются, тогда s
становится "11"
.
Третья итерация внешнего l oop добавит 2
(1
и 1
) до sum
, поэтому sum
становится 13
и s
становится "13"
.
И так далее.
Длина s
будет никогда становится равным (или меньшим) 1
. И это приводит к бесконечному l oop. Который, вероятно, будет остановлен сетевой системой из-за тайм-аута.
Я не читал описание проблемы (в будущем, пожалуйста, включите его в вопрос, чтобы сделать ваши вопросы автономными), но ваш алгоритм неправильно, и вам нужно пересмотреть свое решение. Очень вероятно, что вы должны сбросить sum
(то есть sum = 0;
) до внутреннего l oop, или еще лучше определить его внутри внутреннего l oop:
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++;
}
[Я объяснил это, выполнив отладку резиновой утки кода]