本帖最后由 人造人 于 2021-10-1 10:14 编辑
这次可以了
1. 用户输入一个数
2. 把这个数的各个数位提取出来
3. 对提取出来的数位按题目要求交换
4. 把交换后的数位组装成一个新的数
5. 输出这个数#include <stdio.h>
#include <stdint.h>
static void swap(char *a, char *b) {
char temp = *a;
*a = *b; *b = temp;
}
void digits_get(char digits[], size_t *size, uint32_t value) {
*size = 0;
do {
digits[(*size)++] = (value % 10) + '0';
value /= 10;
} while(value);
for(size_t i = 0, j = *size - 1; i < j; ++i, --j) \
swap(&digits[i], &digits[j]);
}
void digits_set(const char digits[], size_t size, uint32_t *value) {
*value = 0;
for(size_t i = 0; i < size; ++i) {
*value *= 10;
*value += digits[i] - '0';
}
}
void digits_swap(char digits[], size_t size) {
for(size_t i = 0; i < size; ++i) {
size_t max = i;
for(size_t j = i + 1; j < size; ++j) {
if(digits[max] < digits[j]) max = j;
}
if(max != i) {
swap(&digits[i], &digits[max]);
return;
}
}
}
int main(void) {
char digits[10];
size_t size;
uint32_t n;
scanf("%u", &n);
digits_get(digits, &size, n);
digits_swap(digits, size);
digits_set(digits, size, &n);
printf("%u\n", n);
return 0;
}
|