问题G:卡布列克常数

                         问题G:卡布列克常数

时间限制:1秒内存限制:128 MB
提交:489解决:288
[ 提交 ] [ 状态 ] [ 讨论版 ] [命题人:admin ]

题目描述

最近,小Q在数学兴趣课中了解了“卡布列克常数”卡布列克是一位数学家,他在研究数字时发现:任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个最大的数和一个最小的数,然后用最大数减去最小数,差不够四位数时补零,类推下去,最后将变成一个固定的数: 6174,这就是卡布列克常数。
例如:4321-1234 = 3087
  8730-378 = 8352
  8532-2358 = 6174
  7641-1467 = 6174
               ......
小Q想,我能不能编程来验证呢?输入一个符合条件的四位数,然后验证运算过程。

 

 

输入

共1行,为任意一个不是用完全相同数字组成的四位数。

 

输出

变为卡布列克常数的运算过程,由若干行组成,每行是一个算式,不含空格。

 

样例输入

复制样例数据

 

样例输出

 
#include<stdio.h>
int lol(int n);
int node1(int p);//最大数 
int node2(int op);//最小数 
int main()
{
	int j,k,i,n;
	scanf("%d",&n);
	do
	{ 
		if(lol(n)==1)
		{
			n=n*1000;
		}
		else if(lol(n)==2)
		{
			n=n*10;
		}
		else if(lol(n)==3)
		{
			n=n*10;
		}
		j=node1(n);
		k=node2(n);
		n=j-k;
		printf("%d-%d=%d\n",j,k,n);
	}while(n!=6174);
	return 0;
}
int node1(int p)
{
	int i,s[4],j,lp=0;
	for(i=0;i<4;i++)
	{
		s[i]=p%10;
		p=p/10;
	}
	for(i=3;i>=0;i--)
	{
		for(j=0;j<i;j++)
		{
			if(s[j]>s[j+1])
			{
				int temp;
				temp=s[j];
				s[j]=s[j+1];
				s[j+1]=temp;
			}
		}
	}
	for(i=3;i>=0;i--)
	{
		if(i==3)
		{
			lp=s[i];
		}
		else
		{
			lp=(lp*10)+s[i];
		}
	}
	return lp;
} 
int node2(int op)
{
	
	int i,j,s[4],kp=0;
	for(i=0;i<4;i++)
	{
		s[i]=op%10;
		op=op/10;
	}
	for(i=3;i>=0;i--)
	{
		for(j=0;j<i;j++)
		{
			if(s[j]<s[j+1])
			{
				int temp;
				temp=s[j];
				s[j]=s[j+1];
				s[j+1]=temp;	
			}
		}
	}
	for(i=3;i>=0;i--)
	{
		if(i==3)
		{
			kp=s[i];
		}
		else
		{
			kp=(kp*10)+s[i];
		}
	}
	return kp;
}
int lol(int n)
{
	int count=1;
	while(n>=10)
	 {
	  count++;
	  n=n/10;
	 }
	return count;
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值