PAT Basic 1019 数字黑洞

PAT BASIC 1019 数字黑洞

题设https://pintia.cn/problem-sets/994805260223102976/problems/994805302786899968

题解:

使用sprintf函数、atoi函数和qsort函数能够很好地简化代码,不需要自己去实现字符串和整数的互转,排序。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char input[5];	
char desc[5];	// 存储降序的数字
char asce[5];	// 存储升序的数字

int comp(char *a, char *b){
	return *a - *b;
}
int compdesc(char *a,char *b){
	return -comp(a,b);
}
		
int main(){
	int n;
	scanf("%d",&n);
	sprintf(input,"%04d",n);
	while(1){
		memcpy(desc,input,5);
		memcpy(asce,input,5);
		qsort(desc,4,sizeof(char),compdesc);
		qsort(asce,4,sizeof(char),comp);
		int a = atoi(desc);
		int b = atoi(asce);
		int result = a - b;	
		if(result == 6174 || result == 0){
			printf("%04d - %04d = %04d",a,b,result);
			break;	// 结果为6174时结束, 为0时说明输入数字四位都相同,也结束
		}else{
			printf("%04d - %04d = %04d\n",a,b,result);	
		}
		sprintf(input,"%04d",result);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值