题目:输入数字n,按顺序输出从1最大的n位10进制数。比如输入3, 则输出1、2、3一直到最大的3位数即999。
分析:当位数较少时,在整数范围内时可由1到pow(10,n)-1 循环输出。
但是当位数超过整数范围时会溢出,需另寻他路。中心思想是进位制,如逢十进一。可定义一个n位数组来模拟一个数字,或者一个n位字符串,
数组中某一位的值的改变是因为后面逢10.
具体实现如下:
*
* printNum.c
*
* Created on: Jun 14, 2012
* Author: xiewenbin
*/
#include <stdio.h>
#include <math.h>
#define POS 3
int count = 0;
void printNum(int bits[], int start, int end)
{
int i = 0;
for(i = start; i <= end; i++)
{
printf("%d",bits[i]);
}
printf("\t");
count++;
if(count % 10 == 0)
{
printf("\n");
}
}
void initNumber(int *num, int len)
{
int i;
/**
* 如果n是3位数,则设置数组止
*/
for(i = 0; i < len; i++)
{
num[i] = 0;
}
num[1] = 1;
}
void PrintToMaxNBits(int n)
{
int number[n+1];
initNumber(number,n+1);
int i;
while(1)
{
/**
* 当最高位等于10时一,以此类推出循环
*/
if(number[0] == 1)
{
break;
}
/**
* 每产生一个数,输出
*/
printNum(number, 1, n);
/**
* 最高位用于递增
*/
number[n]++;
}
}
int main()
{
int m;
for(m = 1; m <= POS; m++)
{
PrintToMaxNBits(m);
}
return 0;
}