c编程输入一个4位正整数,验证6174黑洞问题,按要求输出其运算过程。 6174是一个著名的常数,由印度数学家卡布列克提出。卡布列克发现:任何非四位相同的四位正整数,只要将数字重新排列,组合成最大的数和最小的数再相减,重复以上步骤,7次以内就会出现6174。
时间: 2024-03-27 18:38:46 浏览: 155
数字黑洞问题C程序求解
5星 · 资源好评率100%
好的,以下是 C 语言实现的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 将数字从小到大排序
void sort(int *nums) {
for (int i = 0; i < 3; i++) {
for (int j = i + 1; j < 4; j++) {
if (nums[i] > nums[j]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
}
// 将数字从大到小排序
void sort_desc(int *nums) {
for (int i = 0; i < 3; i++) {
for (int j = i + 1; j < 4; j++) {
if (nums[i] < nums[j]) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
}
}
// 将四位数字拆分成四个数字
void split_num(int n, int *nums) {
for (int i = 3; i >= 0; i--) {
nums[i] = n % 10;
n /= 10;
}
}
// 计算 Kaprekar 过程
void kaprekar(int n) {
int nums[4];
split_num(n, nums);
int count = 0;
while (count < 7) {
sort(nums);
int min_num = nums[0] * 1000 + nums[1] * 100 + nums[2] * 10 + nums[3];
sort_desc(nums);
int max_num = nums[0] * 1000 + nums[1] * 100 + nums[2] * 10 + nums[3];
int result = max_num - min_num;
printf("%04d - %04d = %04d\n", max_num, min_num, result);
if (result == 6174 || result == 0) {
break;
}
split_num(result, nums);
count++;
}
}
int main() {
int n;
printf("请输入一个四位正整数:");
scanf("%d", &n);
kaprekar(n);
return 0;
}
```
你可以输入一个四位正整数,程序将会输出运算过程。注意,如果输入的数不符合要求(比如不是四位正整数),程序会出现错误。
阅读全文