按词典顺序输出数字

这里写图片描述
题目来自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.
基本满足要求,今天考科目一,回来再改。
毕竟我还是菜鸟。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值