用字符串模拟加法:
 #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. PHP发红包程序限制红包的大小

    我们先来分析下规律. 设定总金额为10元,有N个人随机领取: N=1 第一个 则红包金额=X元: N=2 第二个 为保证第二个红包可以正常发出,第一个红包金额=0.01至9.99之间的某个随机数. 第 ...

  2. list<?>转换成 对应的 class

    项目中用到的,list转换成bean.因为查询出来的数据用list 泛型接收,要返回 实体对象.所以需要对应转换. 主要用到的技术:反射. 上代码: public static <T> L ...

  3. lshw查看系统硬件信息

    lshw(Hardware Lister)是另外一个可以查看硬件信息的工具,不仅如此,它还可以用来做一些硬件的benchmark. lshw is a small tool to extract de ...

  4. 基于行块分布函数的通用网页正文内容抽取(带HTML格式)

    算法思路: 假如网页正文(过滤html标签后的)有n行,以k行为一行块,总共可构成n-k+1行块: 以行号为索引号,以行块长度为索引值,形成行块稀疏矩阵: 以上面的稀疏矩阵为基础,找出其骤升骤降点,分 ...

  5. XJOI 3605 考完吃糖(DAG图dfs)

    题目描述: 期末考试考完了,分数也出来了,大家准备吃糖庆祝一下,为了鼓励同学们下学期能取得更好的成绩,司马红豆同学让n个同学站成一排,如果某个同学的分数比相邻的一个同学要高,那么他得到的糖果就会比这个 ...

  6. 基于Struts2开发快递收发系统 毕业设计 源码

    基于Struts2开发快递收发系统 开发环境:  Windows操作系统 开发工具:Eclipse/MyEclipse+Jdk+Tomcat6+MySql数据库 运行效果图: 此源码经过详细测试 保证 ...

  7. redis 映射数据结构粗略

    [字符串] sds结构,simple dynamic string.是redis底层字符串实现,结构为: typedef char *sds; struct sdshdr { // buf 已占用长度 ...

  8. Transaction And Lock--由外键导致的死锁

    死锁发生情况:1. 存在表A和表B,表A的主键是表B的外键2.事务A在表A上申请到X锁以修改表A中数据和删除表A中的数据,然后需要检查表B中的数据是否满足外键约束,从而需要Range锁来锁住表B3.事 ...

  9. Chrome离线安装包下载地址

    最新Chrome离线安装包下载地址: x86/x64非管理员安装包: https://www.google.com/intl/zh-CN/chrome/browser/desktop/index.ht ...

  10. C# Log4.Net日志组件的应用系列(一)

    引言 Log4Net应该可以说是.NET中最流行的开源日志组件了.在各种项目框架中可以说是必不可少的组成部分.个人认为Log4Net有下面几个优点: 1. 使用灵活,它可以将日志分不同的等级,以不同的 ...