编程练习:验证卡布列卡猜想

//卡布列卡猜想
//输入一个四位数(由不完全相同的四个数字组成)→一个最大数(逆序)一个最小数(正序)
//大减小得到差,对差重复操作
//若不够四位数用零补齐
//不完全相同--num%1111!=0即可
#include<stdio.h>
int GetMax(int x) { //冒泡得到逆序
	int maxnum,i,change,temp,a[4]= {0}; //小于1000的用0补位
	i=0;
	change=1;
	while(x!=0) {//把四个位置分离出来存到数组里
		a[i]=x%10;
		x=x/10;
		i++;
	}
	while(change) {//冒泡排序 
		change=0;
		for(i=0; i<3; i++) {
			if(a[i]<a[i+1]) {
				temp=a[i];
				a[i]=a[i+1];
				a[i+1]=temp;
				change=1;//发生交换 
			}
		}
	}
	maxnum=a[0]*1000+a[1]*100+a[2]*10+a[3];
	return  maxnum;
}
int main() {
	int num,b[4],i,temp,max,min;
	scanf("%d",&num);
	while(num%1111==0||num>9999||num<0) {
		printf("输入一个由不完全相同的四个数字组成的四位数:");
		scanf("%d",&num);
	}
	while(num!=6174) {
		max=GetMax(num);
		temp=max;
		i=0;
		while(temp!=0){
			b[i]=temp%10;
			temp=temp/10;
			i++;
		}
		min=b[0]*1000+b[1]*100+b[2]*10+b[3];
		num=max-min;
		//printf("%4d-%4d=%4d\n",max,min,num);
		printf("%4d-",max);
		for(i=0;i<4;i++){
			printf("%d",b[i]);
		}
		printf("=%4d\n",num);
	}
	return 0;
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值