【面试题】剑指Offer-12-打印1到N最大的数字
2017-04-03 20:14
447 查看
题目概述
输入数字N,按顺序打印出从1到最大的N位10进制数字比如输入3,则打印1-999之间的数字
解决思路
直接写个小函数,用循环求出最大的N位数然后再打印
注意:当输入的N很大的时候,很有可能造成越界的情况!
改进
new出来一串字符数组,长度为N+1从低到高依次改变一个位的数字
递归判断每一个位
如果递归达到长度为N的数字,则打印
代码实现
#include<iostream> using namespace std; //打印数字 void PrintStrNum(char* str) { bool IsBegin = true; size_t length = strlen(str); for (size_t i = 0; i < length; ++i) { //不打印之前的0 if (IsBegin && str[i] != '0') IsBegin = false; if (IsBegin == false) printf("%c", str[i]); } //打印一个Table键 printf("\t"); } //递归调用该函数进行统计数字 void _PrintDigits(char* num,const size_t length,const size_t index) { //所有位数统计完毕,可以打印 //并返回 if (index == length - 1) { PrintStrNum(num); return; } //没有统计完毕,递归统计数字 for (size_t i = 0; i < 10; ++i) { num[index + 1] = i + '0'; _PrintDigits(num, length, index + 1); } } //初始化及调用递归函数 void PrintDigits(const int length) { if (length <= 0) return; char* num = new char[length + 1]; num[length] = '\0'; size_t index = 0; for (size_t i = 0; i < 10; ++i) { num[0] = i + '0'; _PrintDigits(num, length, 0); } cout << endl; } void TestPrintDigits() { cout << "两位数:" << endl; PrintDigits(2); cout << "三位数:" << endl; PrintDigits(3); cout << endl; }
相关文章推荐
- 剑指offer--面试题12:打印1到最大的n位数--Java实现
- 【剑指offer 面试题12】打印1到最大的n位数
- 剑指Offer系 4000 列-面试题12:打印1到最大的n位数
- 剑指offer 面试题12 打印1到最大的n个数
- [剑指offer][面试题12]打印1到最大的n位数
- 剑指offer编程题Java实现——面试题12打印1到最大的n位数
- 剑指offer-面试题12:打印1到最大的n位数
- 【剑指offer】面试题12:打印1到最大的n位数
- 剑指offer之面试题12打印1到最大的n位数
- 剑指offer 面试题12 打印1到n位整数的最大值
- 剑指Offer:面试题12 打印1到最大的n位数
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 剑指offer面试题12——打印1到最大的n位数
- 【剑指Offer学习】【面试题12 :打印1 到最大的n 位数】
- 剑指offer-面试题12-打印1到最大的n位数
- 剑指offer面试题12——打印1到最大的n位数
- 【剑指offer】面试题12、打印 1 到最大的 n 位数
- 【剑指offer】面试题12:打印1到最大的n位数
- 剑指offer_面试题12_打印1到最大的n位数(大数问题)
- 剑指offer面试题12-打印1到最大的n位数