给定一个正整数(十进制形式),输出消除重复数字后的最大整数

本文介绍了一种通过数组下标实现的算法,用于从输入的正整数中消除重复数字,并输出由剩余数字组成的最大整数。算法首先初始化一个10元素的数组,遍历输入整数的每个数字作为数组下标,标记已遇到的数字。最后,通过遍历数组的有效值下标,按降序排列生成最大整数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 要求:给定一个正整数(十进制形式),输出消除重复数字后的最大整数

例如: 输入12355996, 输出965321

基本思路:使用数组下标实现

                  1. 定义一个长度为10的数组(因为十进制正整数每一位数字范围为0~9),并且将所有元素赋值为无效值

                  2. 遍历输入整数的每一个数字,将数字看做数组下标,将对应下标的元素值设置为有效。遍历后,即完成了去重

                  3. 数组中有效值的下标可以组成去重后的最大整数

 

ps:程序存在scanf溢出的情况,可能之后不能使用scanf来进行输入动作。

#include <stdio.h>
#include <stdbool.h>
#include <string.h>

unsigned int get_max_val(unsigned long int val)
{
	bool table[10];
	bool *ptable = table;
	unsigned long int res = 0;
	signed char i;

	memset(ptable, false, sizeof(table) / sizeof(table[0]));

	while(val)
	{
		table[val % 10] = true;
		val = val / 10;
	}
	
	for(i = 9; i >= 0; i--)
	{
		if(table[i])
		{
			res = res * 10 + i;
		}
	}	

	return res;
}

int main()
{
	unsigned long int val;

	while(1)
	{
		printf("please input value: ");
		scanf("%lu", &val);
		printf("The result is: %d\n", get_max_val(val));
	}	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值