题目链接 题目大意是要写出任意一个四位数到6174的变化过程; 运用循环即可,一开始不知道如何下手,所以先写了一个第一轮的初始状况,利用最大值减最小值不等于6174作为循环条件; 注意输出的格式!!!数字之间有空格!!
// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #pragma warning(disable:4996); #include <iostream> #include<stdio.h> #include<algorithm> #include<string.h> #include<stack> using namespace std; int main() { int n; cin >> n; int jilu = n;//以防四位都相同直接输出 int a[4] = { 0 }; int i = 0; while (n) { a[i++] = n % 10; n /= 10; } if (a[0] == a[1] && a[0] == a[2] && a[0] == a[3]) cout << jilu << " - " << jilu << " = " << "0000" << endl; else { sort(a, a + 4); int c = 1; int max, min; max = min = 0; for (int i = 0;i < 4;i++) { max += a[i] * c; c *= 10; } for (int i = 0;i < 4;i++) { c /= 10; min += a[i] * c; } printf("%04d - %04d = %04d\n", max, min, max - min);//运用%04d控制输出格式 while ((max - min) != 6174) { int n = max - min; int jilu = n; int a[4] = {0}; int i = 0; while (n) { a[i++] = n % 10; n /= 10; } sort(a, a + 4); max = min = 0; for (int i = 0;i < 4;i++) { max += a[i] * c; c *= 10; } for (int i = 0;i < 4;i++) { c /= 10; min += a[i] * c; } printf("%04d - %04d = %04d\n", max, min, max - min); } } return 0; }