按词典顺序输出数字

这里写图片描述
题目来自leecode
题目要求输入一个数,把所有小于该数的数按顺序输出,顺序为先比较首位,首位相同再比较第二位,依次比较,从小到大排列。比如输入123,输出为1,10,100,101。。。。。99

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int weishu(int a)//返回该数的位数
{
    int ii = 0;
    while (a>0)
    {
        ii++;
        a /= 10;
    }
    return ii;
}
int iwei(int i,int a)//返回第i的数字
{
    int w = weishu(a);
    if (i<=w)
    {
        for (int ii = 0; ii < w - i; ii++)
        {
            a /= 10;
        }
        a %= 10;
        return a;
    }
    return -1;
}
int compare(int a, int b,int i) {//比较第i位的数字,运用递归的思想
    if (iwei(i,a)>iwei(i,b))
    {
        return 1;
    }
    else if (iwei(i, a)<iwei(i, b))
    {
        return -1;
    }
    else
    {
        /*if (weishu(a) < weishu(b))
        {
            return -1;
        }
        else if (weishu(a) > weishu(b))
        {
            return 1;
        }
        else*/
            compare(a, b, ++i);
    }
}
void swap(int &a, int&b) {
    int temp = 0;
    temp = a;
    a = b;
    b = temp;
}
int main()
{
    int aa;
    scanf("%d", &aa);
    int sum[10000] = {1};
    for (int i = 0; i < aa; i++)
    {
        sum[i - 1] = i;
    }
    for (int i = 0; i < aa; i++)
    {
        for (int j = i+1; j < aa; j++)
        {
            if (compare(sum[i], sum[j], 1) == 1)
                swap(sum[j], sum[i]);
        }
    }
    for (int i = 0; i < aa; i++) {
        if (sum[i]!=0)
        {
            printf("%d ", sum[i]);
        }
    }
}

输出示例:
这里写图片描述
这里写图片描述
注意事项:
这个题我用的是数组,所以预先定义一个足够大的数组,但是如果用户输入的数超出了数组的大小,就会出现异常,所以改用数据结构链表的思想可以解决该问题,用Java的同学也可以用ArrayList.
基本满足要求,今天考科目一,回来再改。
毕竟我还是菜鸟。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页