您的位置:首页 > 职场人生

【剑指offer 面试题12】打印1到最大的n位数

2015-06-19 21:52 483 查看
思路:

  用n位字符数组表示n位数,通过递归的方式逐层(位)遍历,递归终止时打印。

#include "stdio.h"
#include "string.h"

//打印“数字”
void printNum(char* number)
{
//设置前导零状态为开启
bool ishead0 = true;
for(int i = 0; i < strlen(number); i++)
{
//遇到第一个非零数,关闭前导零状态
if(number[i] != '0' && ishead0 == true)
ishead0 = false;
//前导零状态关闭下,方可打印数字
if(!ishead0)
printf("%c", number[i]);
}
printf("\n");
}

void print1toNrec(char* number, int len, int index)
{
//递归终止,打印
if(index == len)
{
printNum(number);
return ;
}

//递归执行
for(int i = 0; i < 10; i++)
{
number[index] = '0' + i;
print1toNrec(number, len, index + 1);
}
}

void print1toN(int n)
{
if(n <= 0)
return ;

//定义并初始化number数组
char* number = new char[n + 1];
memset(number, '0', n);
number
= '\0';

//从number[0]处递归调用
for(int i = 0; i < 10; i++)
{
number[0] = '0' + i;
print1toNrec(number, n, 1);
}
}

int main()
{
print1toN(3);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: