阿克劳斯 2020-09-11 21:59 采纳率: 100%
浏览 130
已采纳

C++中循环语句加入打印可跳出,不加打印会卡死

代码所要解决的题

# 我写的代码为:

#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循环体中,加入任意的打印语句(如换行符,空格,制表符等等),都可以使程序不卡死,求解
(我知道解这道题有更简单的方法,但是我想知道这种写法卡死的原因,谢谢大佬)

  • 写回答

2条回答

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥15 在数字信号处理中用MATLAB显示波形。
      • ¥15 keil MDK软件进行仿真调试的局限
      • ¥15 关于gateway产生临时文件夹的问题
      • ¥15 Java Broken Pipe以及OOM
      • ¥20 请问有没有RTL8211FS的参考原理图
      • ¥50 esp32的platfromio工程添加文件就会编译失败
      • ¥15 linux下运行VASP报错
      • ¥15 python里面查找赋值,如何可以在剩余未空值的行里面进行进一步的筛选呢?
      • ¥15 电路分析的综合实验有没有会的
      • ¥15 #硬件设计#PNP三级管输出设计问题