#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循环体中,加入任意的打印语句(如换行符,空格,制表符等等),都可以使程序不卡死,求解
(我知道解这道题有更简单的方法,但是我想知道这种写法卡死的原因,谢谢大佬)
conv中,写ans=0;
我调试了一下,发现不输出是因为dif根本不为6174,是ans没有初始化的原因。
写完ans=0就能正常输出。
而写输出语句ans就=0;???
可能是内存释放?
int conv(char s1[], int n){
int ans=0;//不加输出语句不会清零
for (int i = 0; i < n; i++) {
ans += (s1[i] - '0') * lis[i];
}
return ans;
}