题目描述
任意一个四位正整数(4位数字相同者除外), 将各位数字组成一个最大数和最小数,两数相减并重复这一过程必得6174。
输入格式
输入一个四位正整数。
输出格式
输出文件包含多行, 组成一个最大数和一个最小数就输出一行,直道结果为6174。
样例
输入数据 1
4123
输出数据 1
4321-1234=3087
8730-378=8352
8532-2358=6174
题目描述
任意一个四位正整数(4位数字相同者除外), 将各位数字组成一个最大数和最小数,两数相减并重复这一过程必得6174。
输入格式
输入一个四位正整数。
输出格式
输出文件包含多行, 组成一个最大数和一个最小数就输出一行,直道结果为6174。
样例
输入数据 1
4123
输出数据 1
4321-1234=3087
8730-378=8352
8532-2358=6174
那就做一个函数专门拆解整数,得到最大数和最小数,然后不断按照规则循环,直到获得6174
#include <stdio.h>
void func(int n,int *max,int *min)
{
int a[4],i,j,t;
a[0] = n/1000;
a[1] = n%1000/100;
a[2] = n%100/10;
a[3] = n%10;
for(i=0;i<3;i++)
for(j=0;j<3-i;j++)
{
if(a[j] < a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
*max = 0;
for(i=0;i<4;i++)
*max = *max * 10 + a[i];
*min = 0;
for(i=3;i>=0;i--)
*min = *min * 10 + a[i];
}
int main()
{
int n,max,min;
scanf("%d",&n);
while(n!=6174)
{
func(n,&max,&min);
printf("%d-%d=%d\n",max,min,max-min);
n=max-min;
}
return 0;
}