用c语言*验证卡布列克运算。即:任意一个四位数,只要它们各个位上的数字是不全相同的,就有这样的规律: (1)将组成该四位数的四个数字由大到小排列,形成由这四个数字构成的最大的四位数; (2)将组成该四位数的四个数字由小到大排列,形成由这四个数字构成的最小的四位数(如果四个数字中含有0,则得到的数不足四位); (3)求两个数的差,得到一个新的四位数(高位零保留)。 重复以上过程,最后得到的结果总是6174。这个数被称为卡布列克常数。请编写一个递归函数,完成以上的卡布列克运算。 **输入格式要求:"%d" 提示信息:"Enter number:" **输出格式要求:" [%d]:%d-%d=%d\n" 程序运行示例如下: Enter number: 1234 [1]:4321-1234=3087 [2]:8730-378=8352 [3]:8532-2358=6174
时间: 2024-02-25 17:56:07 浏览: 197
以下是C语言实现的递归函数:
```c
#include<stdio.h>
#include<stdlib.h>
void kaprekar(int num, int count){
int digits[4];
int i, j, temp;
int big_num = 0, small_num = 0, diff = 0;
// 将数字拆分为单个数字的数组
for(i=0; i<4; i++){
digits[i] = num % 10;
num /= 10;
}
// 将数字从大到小排列,得到最大数
for(i=0; i<3; i++){
for(j=i+1; j<4; j++){
if(digits[i] < digits[j]){
temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
}
big_num = big_num * 10 + digits[i];
}
big_num = big_num * 10 + digits[3];
// 将数字从小到大排列,得到最小数
for(i=0; i<3; i++){
for(j=i+1; j<4; j++){
if(digits[i] > digits[j]){
temp = digits[i];
digits[i] = digits[j];
digits[j] = temp;
}
}
small_num = small_num * 10 + digits[i];
}
small_num = small_num * 10 + digits[3];
// 计算两个数的差
diff = big_num - small_num;
// 输出结果
printf(" [%d]:%d-%d=%d\n", count, big_num, small_num, diff);
// 如果结果不是6174,则继续进行卡布列克运算
if(diff != 6174){
kaprekar(diff, count+1);
}
}
int main(){
int num = 0;
printf("Enter number: ");
scanf("%d", &num);
kaprekar(num, 1);
return 0;
}
```
使用方式:
编译运行上述程序,输入一个四位数,即可进行卡布列克运算。例如:
```
Enter number: 1234
[1]:4321-1234=3087
[2]:8730-378=8352
[3]:8532-2358=6174
```
阅读全文