# 我写的代码为:
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 4;
const int lis[] = { 1000, 100, 10, 1 };
bool compare(int a, int b) {
return a > b;
}
int conv(char s1[], int n) {
int ans;
for (int i = 0; i < n; i++) {
ans += (s1[i] - '0') * lis[i];
}
return ans;
}
int main(void) {
char s[10];
int dif, a1, a2, time = 0, tmp;
cin >> s;
while (1) {
sort(s, s + N, compare);
a1 = conv(s, N);
sort(s, s + N);
a2 = conv(s, N);
dif = a1 - a2;
// cout<<"a1: "<<a1<<endl;
// cout<<"a2: "<<a2<<endl;
//cout << "dif: " << dif << endl;
time++;
if (dif == 6174)
break;
for (int i = 3; i >= 0; i--) {
s[i] = '0' + dif % 10;
dif /= 10;
}
}
cout << time;
getchar();
getchar();
return 0;
}
直接运行,输入样例运行会卡死
但是如果加入对中间过程变量的打印语句(即代码中注释掉的部分),程序便可以正常运行。
甚至于,如果在while循环体中,加入任意的打印语句(如换行符,空格,制表符等等),都可以使程序不卡死,求解
(我知道解这道题有更简单的方法,但是我想知道这种写法卡死的原因,谢谢大佬)