每日一题21:从0打印到具有n位整数的最大数
来源:互联网 发布:网络安全保密 标准 编辑:程序博客网 时间:2024/04/29 09:06
该题目的难点在于n可能很大,超过了整数表示的范围,所以一般有两种思路,一种是用字符串表示整数,并实现++操作符,另一种是把该题目当做排列组合来做,使用递归可以实现,下面给出使用递归实现的代码:
void __print(char digit_array[], int index, int n){ if (index < 0) return; if (index == n - 1) { digit_array[index] = '0'; //从0开始 for (int i = 0; i < 10; ++i) { digit_array[index] = i + '0'; cout << digit_array << endl; } return; } //这是为了在打印是不会像出现0012这样的情况, //但是又要保证像1002这种情况的出现。 //整个字符数组开始使用‘ ’(空格)初始化的 if (digit_array[index] != ' ') digit_array[index] = '0'; __print(digit_array, index + 1, n); //从1开始,该位为0时,由上一句负责 for (int i = 1; i < 10; ++i) { digit_array[index] = i + '0'; __print(digit_array, index + 1, n); }}void PrintN(int n){ char *digit_array = new char[n + 1]; for (int i = 0; i < n; ++i) { digit_array[i] = ' '; } digit_array[n] = '\0'; //从第一位开始递归 __print(digit_array, 0, n); delete[]digit_array;}
测试代码:
#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ PrintN(4); return 0;}
程序运行截图:
使用递归可以打印出很大的数,具体和系统分配的栈空间大小有关,n太大了,递归深度过大,使栈溢出将不能得到解答。而文章开头的第一种思路则和系统当时所能分配的空间大小决定,我认为这种思路的效率高于递归实现,因为递归实现其实也是在做++运算,加上递归的耗费,自然就慢了。
0 0
- 每日一题21:从0打印到具有n位整数的最大数
- 输入数字n,按顺序打印出从1到最大的n位十进制数
- 输入数字n,按顺序打印出从1到最大的n位十进制数
- Lintcode 用递归打印从1到N位的最大整数
- 输入数字n,按顺序打印出从0到最大n位十进制数
- 打印1到最大的N位整数
- (《剑指offer》笔记)打印从1到最大的N位十进制数
- 打印出从1到最大的n位十进制数,如输入3 打印 1到 999
- 打印1到n位最大数
- 打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数。
- 打印从1到n位数的最大数
- 每日一题(64) - 打印1到最大的n位数
- 每日一题(58) - 从1到n整数中1出现的次数
- 每日一题--从1到n整数中1出现的次数
- 剑指offer 面试题(打印1到n最大的n位整数)(6)
- 剑指offer面试题12 打印从1到最大n位的所有数(大数,递归)
- 打印从1到n的整数
- 输入数字n,顺序打印出1到n位的十进制最大数
- ngnix 配置域名和二级域名
- 边学边笔记-Java中的过滤器详细笔记之全局编码统一+html标记转义+脏话过滤
- VC Check box (转载新浪博客于超峰的)
- web前端性能优化小结
- 机器学习入门:线性回归及梯度下降
- 每日一题21:从0打印到具有n位整数的最大数
- 【C语言】用函数指针变量完成:输入两个整数,让用户选择函数,选择1输出较大的数,选择2输出较小的数
- Process and thread
- Win7下U盘安装Ubuntu14.04双系统步骤详解
- HDU 1072 Nightmare【BFS】
- LeetCode:Longest Substring Without Repeating Characters
- sql
- HTML5的TCP和UDP Web Socket API草案定稿
- 绝对定位 position:absolute,相对定位 position:relative