编程输入一个4位正整数,验证6174黑洞问题,按要求输出其运算过程。
6174是一个著名的常数,由印度数学家卡布列克提出。卡布列克发现:任何非四位相同的四位正整数,只要将数字重新排列,组合成最大的数和最小的数再相减,重复以上步骤,7次以内就会出现6174。
例如:8045,8540-0458=8082,8820-0288=8532,8532-2358=6174。
输入样例:
5678
输出样例:
8765-5678=3087
8730-0378=8352
8532-2358=6174
#include<iostream>
#include<cmath>
using namespace std;
void num(int n) {
int a[4],b[4];
int flag=0;
while(n!=6174) {
int i=0;
while(n>0) {
a[i]=n%10;
b[i]=n%10;
n/=10;
i++;
}
int num_max=0; //求组合成的最大数
for(int i=3; i>=0; i--) {
int max=0;
for(int j=0; j<4; j++) {
if(a[max]<a[j]) {
max=j;
}
}
num_max=num_max+pow(10,i)*a[max];
a[max]=0;
}
int num_min=0; //求组合成的最小数
for(int i=3; i>=0; i--) {
int min=0;
for(int j=0; j<4; j++) {
if(b[min]>b[j]) {
min=j;
}
}
num_min=num_min+pow(10,i)*b[min];
//cout<<num_min<<endl;
b[min]=9;
}
printf("%.4d-%.4d=%.4d\n",num_max,num_min,num_max-num_min); //四位以0补空格
n=num_max-num_min;
}
}
int main() {
int n;
cin>>n;
num(n);
return 0;
}