【C语言】拆数字组成最大数

相信你是最棒哒!!!


题目描述

任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。

输入描述

自然数 n

输出描述

各位数字组成的最大数

样例输入
1593
样例输出
9531

正确代码

法一注释版
#include<stdio.h> 

int main () { 
    int n,i,j,q,a[50]; // 声明变量n用于存储输入的数字,i、j、q用于循环,a[50]是一个数组,用于存储数字的每一位
    scanf("%d",&n); // 读取n
    for(i=0;; i++) { // 一个无限循环,用于分解数字n的每一位
        a[i]=n%10; // 取n的最后一位数字,即n除以10的余数,存储在数组a的第i个位置
        n=n/10; // 将n除以10,去掉最后一位数字
        if (n==0) // 如果n变为0,说明数字已经被完全分解
            break; // 跳出循环
    }
    int t; // 声明一个临时变量t,用于交换数字
    for(j=1; j<i; j++) { // 外层循环,控制排序的轮数,从1开始,因为第0位不需要排序
        for(q=0; q<=i-j; q++) { // 内层循环,用于比较并交换相邻的数字
            if(a[q]<a[q+1]) { // 如果当前位置的数字小于下一个位置的数字
                t=a[q]; // 交换两个数字
                a[q]=a[q+1];
                a[q+1]=t;
            }
        }
    }
    for(q=0; q<=i; q++) // 循环输出排序后的数字
        printf("%d",a[q]); // 打印数组a中的每个元素
} // 主函数的结束
简洁版
#include<stdio.h>
int main () {
	int n,i,j,q,a[50];
	scanf("%d",&n);
	for(i=0;;i++) {
		a[i]=n%10;
			n=n/10;
			if (n==0)
			break;
	}
	int t;
	for(j=1; j<i; j++) {
		for(q=0; q<=i-j; q++) {
			if(a[q]<a[q+1]) {
				t=a[q];   
				a[q]=a[q+1];
				a[q+1]=t;
			}
		}
	}
		for(q=0;q<=i;q++)
         printf("%d",a[q]);       
}
法二注释版
#include <stdio.h>  // 包含标准输入输出库,用于scanf和printf函数
#include <stdlib.h> // 包含标准库,提供qsort函数
#include <string.h> // 包含字符串处理库,提供strlen函数

// 比较函数,用于qsort比较两个元素的大小
int compare(const void *a, const void *b) {
    return *(char *)b - *(char *)a; // 如果b指向的字符大于a指向的字符,则返回正数;如果小于,则返回负数;如果相等,则返回0
}

int main() {
    char a[50]; // 声明一个字符数组
    scanf("%s", &a); // 读取一个字符串a
    int l = strlen(a); // 使用strlen函数计算字符串a的长度,并存储在变量l中

    qsort(a, l, sizeof(char), compare); // 使用qsort函数对字符串a进行排序
      // a是要排序的数组的首地址
      // l是要排序的元素个数
      // sizeof(char)指定每个元素的大小,这里是1,因为a是字符数组
      // compare是自定义的比较函数,用于告诉qsort如何比较两个元素

    printf("%s\n", a); // 打印排序后的字符串
    return 0; // 程序正常结束
}
简洁版
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(const void *a, const void *b) {
    return *(char *)b - *(char *)a;
}

int main() 
{
	char a[50];
	scanf("%s",&a);
	int l=strlen(a);
	qsort(a, l, sizeof(char), compare); 
	printf("%s\n", a); 
	
	return 0;
}

总结

这段代码的主要功能是读取用户输入的一个字符串,然后使用 qsort 函数对这个字符串中的字符进行升序排序,并输出排序后的结果。qsort 是一个通用的排序函数,它可以对任何类型的数组进行排序,只要提供了正确的比较函数。在这个例子中,比较函数 compare 被设计为按照字符的ASCII值进行比较,从而实现字符的升序排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值