这是知乎上面的一个题目,挺有意思,面试的时候应该是作为基础题,很多人不屑于看这样的题目,但是到自己些的时候,就会有很多问题。
题目要求
输入一个数3256,将他从小到大输出,就是2356
分析
输入的是字符,我们这里就只分析了int类型不考虑其他字符了。
代码如下:
#include <stdio.h>
#include <string.h>/*
二进制 |十进制 |十六进制 | 字符
0011 0000 48 30 0
0011 0001 49 31 1
0011 0010 50 32 2
0011 0011 51 33 3
0011 0100 52 34 4
0011 0101 53 35 5
0011 0110 54 36 6
0011 0111 55 37 7
0011 1000 56 38 8
0011 1001 57 39 9
*/ void sort(char *nums,unsigned char *output,size_t len);
int main(int argc, char const *argv[])
{char nums[100];unsigned char output[10] = {0};/*0~9*/int i = 0;gets(nums);sort(nums,output,strlen(nums));//printf("\n");for(i = 0;i<10;i++){while(output[i] --) printf("%c",i+0x30);}getchar();return 0;
}void sort(char *nums,unsigned char *output,size_t len)
{int i = 0;for(i = 0;i<len;i++){output[nums[i] - 0x30]++;//printf("%d,",nums[i] - 0x30);}
}
代码很简单,把对应的字符ascii码转成 0~9的整型,然后使用计数排序,也就是每个位置判断一下,如果这个位置是1,就把这个位置的数值加1。
输出
推荐阅读:
专辑|Linux文章汇总
专辑|程序人生
专辑|C语言
我的知识小密圈