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