用字符串模拟加法:
 #include"iostream"
#include"string.h"
using namespace std; bool AddOne(char *number,int n);
void PrintNumber(char *number,int n); void Print1ToN(int n)
{
if(n<=)
return;
char *number=new char[n+];
memset(number,'',n);
number[n]='\0';
while(AddOne(number,n))
{
PrintNumber(number,n);
}
delete[] number;
} bool AddOne(char *number,int n)
{
bool isInRange=true;
int carry=;
int iDigit;
for(int i=n-;i>=;i--)
{
iDigit=number[i]-''+carry;
if(i==n-)
iDigit++;
if(iDigit>=)
{
if(i==)
isInRange=false;
else
{
carry=iDigit/;
iDigit%=;
number[i]=iDigit+'';
}
}
else
{
number[i]=iDigit+'';
break;
}
}
return isInRange;
} void PrintNumber(char *number,int n)
{
bool firstNoZero=false;
for(int i=;i<n;i++)
{
if(!firstNoZero&&number[i]!='')
{
firstNoZero=true;
}
if(firstNoZero)
cout<<number[i];
}
cout<<endl;
}
int main()
{
int n;
while(cin>>n)
{
Print1ToN(n);
}
return ;
}

还可以用全排列的思想,递归调用去解决:

 #include"iostream"
using namespace std; void Print1ToNRecursively(int *number,int length,int index);
void PrintNumber(int *number,int n); void Print1ToN(int n)
{
int *number=new int[n]; for(int i=;i<;i++)
{
number[]=i;
Print1ToNRecursively(number,n,);
}
} void Print1ToNRecursively(int *number,int length,int index)
{
if(index==length-)
{
PrintNumber(number,length);
return;
}
for(int i=;i<;i++)
{
number[index+]=i;
Print1ToNRecursively(number,length,index+);
}
} void PrintNumber(int *number,int n)
{
int i=-;
while(i<n&&number[++i]==) continue;
while(i<n) cout<<number[i++];
cout<<endl;
} int main()
{
int n;
while(cin>>n)
{
Print1ToN(n);
}
return ;
}

剑指offer——面试题17:打印从1到最大的n位数的更多相关文章

  1. 剑指Offer:面试题12——打印1到最大的n位数(java实现)

    问题描述: 输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的3位数即999. 思路1:最简单的想法就是先找出最大的n位数,然后循环打印即可. public ...

  2. 剑指Offer:面试题17——合并两个排序的链表

    题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. 思路1: 分别用p1,p2两个指针扫描两个有序链表,p3指针去构建新链表h3. p1.val & ...

  3. 【剑指offer 面试题17】合并两个排序的链表

    思路: 比较两个链表端点值的大小,通过递归的方式排列. #include <iostream> using namespace std; struct ListNode { int val ...

  4. 剑指offer面试题17:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点人是按照递增排序的.解题思路:两个链表分别都已经是有序的了,遍历链表的时候只要比较两个链表当前位置大小,取出最小的添加到新链表中. 可以有 ...

  5. 【剑指offer】面试题 17. 打印从 1 到最大的 n 位数

    面试题 17. 打印从 1 到最大的 n 位数 题目描述 题目:输入数字 n,按顺序打印出从 1 最大的 n 位十进制数.比如输入 3,则打印出 1.2.3 一直到最大的 3 位数即 999. 解答过 ...

  6. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  7. C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解

    剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...

  8. 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径

    题目链接地址: http://ac.jobdu.com/problem.php? pid=1368 题目1368:二叉树中和为某一值的路径 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252 ...

  9. 【剑指Offer面试题】 九度OJ1371:最小的K个数

    题目链接地址: http://ac.jobdu.com/problem.php?pid=1371 题目1371:最小的K个数 时间限制:1 秒内存限制:32 兆特殊判题:否提交:5938解决:1265 ...

随机推荐

  1. 二项分布&超几何分布

    伯努利分布  在一次试验中,事件A出现的概率为p,不出现的概率为q=1-p.若以β记事件A出现的次数,则β仅取0,1两值,相应的概率分布为: 二项分布是指在只有两个结果的n次独立的伯努利试验中,所期望 ...

  2. python 输入输出,file, os模块

    Python 输入和输出 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数. 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用 sys.stdout ...

  3. SimpleDateFormat是线程不安全的

    线程不安全的SimpleDateFormat SimpleDateFormat是线程不安全的 SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但 ...

  4. [GO]json解析到结构体

    package main import ( "encoding/json" "fmt" ) type IT struct { Company string `j ...

  5. linux常用Java程序员使用命令(二)

    出品人:北极的大企鹅 1. pwd 显示当前路径 2. cd 切换目录 . .. ~ 例如: cd /root 3. ls 显示文件(夹) -l 显示详细信息 -a 显示全部,包括隐藏文件(夹)(这个 ...

  6. jQuary总结11:jQuery插件封装---jQuery封装 手风琴 动画插件

    完整代码下载点击我的GitHub: https://github.com/XingJYGo/jquery-accordion 1 手风琴的效果展示如下: 2 封装插件目录结构如下: 主要包括:HTML ...

  7. 使用jasmine-node 进行NodeJs单元测试 环境搭建

    关于jasmine就不多说了,关于语法请参加官方文档.http://pivotal.github.io/jasmine/ 关于NodeJS的单元测试框架有多种,如果要在NodeJS中使用jasmine ...

  8. [Lua快速了解一下]Lua的OOP

    __index(a, b) 对应表达式 a.b 上面我们看到有__index这个重载,这个东西主要是重载了find key的操作.这波操作可以让Lua变得有点面向对象的感觉,让其有点像Javascri ...

  9. [示例] Firemonkey 画出 1 点像素的线

    说明:在 Firemonkey 在移动平台 Android & iOS 要直接在 Canvas 画出 1 点像素的线,似乎有点困难,不过利用一点小技巧,还是能达到这个要求的,首先要建立一个 B ...

  10. chrome console cheat sheet

    快捷键 打开console界面快捷键:ctrl+shift+J 清空log:ctrl+L 选项 Log XMLHTTPRequests:显示ajax Preserve log upon navigat ...