从键盘输入一个四位正整数,怎么分离出该正整中的每一位数字,并按逆序显示输出各位数字;然后用分离出的每位数字组成一个最大数和一个最小数,并显示输出。怎么求最小的有意义四位数,0不在首位
首先,我们可以通过除以10和取模10的方法,将一个四位数分离出每一位数字,并按逆序输出:
int num, digit;
scanf("%d", &num);
while(num > 0) {
digit = num % 10;
printf("%d", digit);
num /= 10;
}
接着,我们可以创建一个数组,将分离出的每一位数字存入数组中,并对数组进行排序,以得到最大数和最小数:
int num, digit, digits[4], i;
scanf("%d", &num);
for(i=0; i<4; i++) {
digit = num % 10;
digits[i] = digit;
num /= 10;
}
// 对数组进行排序,从小到大排序可以得到最小数
// 从大到小排序可以得到最大数
qsort(digits, 4, sizeof(int), cmp);
最后,我们可以从数组中取出最小数,并判断它是否符合要求(即0不在首位):
int min = digits[0];
if(min == 0) {
// 如果最小数为0,则将它和第一个非零数交换位置
for(i=1; i<4; i++) {
if(digits[i] != 0) {
digits[0] = digits[i];
digits[i] = 0;
break;
}
}
min = digits[0];
}
printf("最小的有意义四位数为:%d%d%d%d\n", digits[3], digits[2], digits[1], min);
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
// 比较函数,用于对数组进行排序
int cmp(const void *a, const void *b) {
return *(int*)a - *(int*)b;
}
int main() {
int num, digit, digits[4], i;
scanf("%d", &num);
printf("逆序输出各位数字:");
while(num > 0) {
digit = num % 10;
printf("%d", digit);
num /= 10;
}
printf("\n");
num = num * 10000 + digit * 1000; // 将最后一位数字存入num中,用于后续计算
for(i=0; i<3; i++) {
digit = num % 10;
digits[i] = digit;
num /= 10;
}
digits[3] = num; // 最高位数字
qsort(digits, 4, sizeof(int), cmp);
int min = digits[0];
if(min == 0) {
for(i=1; i<4; i++) {
if(digits[i] != 0) {
digits[0] = digits[i];
digits[i] = 0;
break;
}
}
min = digits[0];
}
printf("最小的有意义四位数为:%d%d%d%d\n", digits[3], digits[2], digits[1], min);
return 0;
}
最大的数就是从大到小排序
最小的数就是先从小到大排序,然后从头看是不是0,如果开头是0,那么把0后面第一个不是0的数和最开始的0交换位置
首先把这个四位数的每一位数拿出来并保存(可以用取模的方法得到每一位数),然后给这四位数进行排序,将最大的一位数乘1000加上第二位乘100加上第三位乘10加上最后一位得到最大的组合,将非0的最小一位数乘1000加上最小的一位数乘100加上,直到加上最后一位数,这样得到最小的组合
void init(Queue *que,size_t cap);//初始化
bool isEmpty(Queue *que);//是否为空
bool isFull(Queue *que);//是否已满
size_t getCap(Queue *que);//队列最大长度
size_t getSize(Queue *que);//队列中元素的个数
void push(Queue *que,T data);//队列末尾添加一个元素
T pop(Queue *que);//取出队列首的元素
T peekFront(Queue *que);//查看队列首的元素
T peekTail(Queue *que);//查找队列尾的元素
void travel(Queue *que);//遍历队列中的元素
void clear(Queue *que);//清空队列中所有的元素
void destroy(Queue *que);//销毁