按词典顺序输出数字

来源:互联网 发布:vc map数据如何拷贝 编辑:程序博客网 时间:2024/06/05 15:29

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

原创粉丝点击