用字符串模拟加法:
  1. #include"iostream"
  2. #include"string.h"
  3. using namespace std;
  4.  
  5. bool AddOne(char *number,int n);
  6. void PrintNumber(char *number,int n);
  7.  
  8. void Print1ToN(int n)
  9. {
  10. if(n<=)
  11. return;
  12. char *number=new char[n+];
  13. memset(number,'',n);
  14. number[n]='\0';
  15. while(AddOne(number,n))
  16. {
  17. PrintNumber(number,n);
  18. }
  19. delete[] number;
  20. }
  21.  
  22. bool AddOne(char *number,int n)
  23. {
  24. bool isInRange=true;
  25. int carry=;
  26. int iDigit;
  27. for(int i=n-;i>=;i--)
  28. {
  29. iDigit=number[i]-''+carry;
  30. if(i==n-)
  31. iDigit++;
  32. if(iDigit>=)
  33. {
  34. if(i==)
  35. isInRange=false;
  36. else
  37. {
  38. carry=iDigit/;
  39. iDigit%=;
  40. number[i]=iDigit+'';
  41. }
  42. }
  43. else
  44. {
  45. number[i]=iDigit+'';
  46. break;
  47. }
  48. }
  49. return isInRange;
  50. }
  51.  
  52. void PrintNumber(char *number,int n)
  53. {
  54. bool firstNoZero=false;
  55. for(int i=;i<n;i++)
  56. {
  57. if(!firstNoZero&&number[i]!='')
  58. {
  59. firstNoZero=true;
  60. }
  61. if(firstNoZero)
  62. cout<<number[i];
  63. }
  64. cout<<endl;
  65. }
  66. int main()
  67. {
  68. int n;
  69. while(cin>>n)
  70. {
  71. Print1ToN(n);
  72. }
  73. return ;
  74. }

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

  1. #include"iostream"
  2. using namespace std;
  3.  
  4. void Print1ToNRecursively(int *number,int length,int index);
  5. void PrintNumber(int *number,int n);
  6.  
  7. void Print1ToN(int n)
  8. {
  9. int *number=new int[n];
  10.  
  11. for(int i=;i<;i++)
  12. {
  13. number[]=i;
  14. Print1ToNRecursively(number,n,);
  15. }
  16. }
  17.  
  18. void Print1ToNRecursively(int *number,int length,int index)
  19. {
  20. if(index==length-)
  21. {
  22. PrintNumber(number,length);
  23. return;
  24. }
  25. for(int i=;i<;i++)
  26. {
  27. number[index+]=i;
  28. Print1ToNRecursively(number,length,index+);
  29. }
  30. }
  31.  
  32. void PrintNumber(int *number,int n)
  33. {
  34. int i=-;
  35. while(i<n&&number[++i]==) continue;
  36. while(i<n) cout<<number[i++];
  37. cout<<endl;
  38. }
  39.  
  40. int main()
  41. {
  42. int n;
  43. while(cin>>n)
  44. {
  45. Print1ToN(n);
  46. }
  47. return ;
  48. }

剑指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. easyui combogrid 多选加载,保存,显示代码

    1.调用代码 UTIL.SetDict($("#txt_ExcludeIndustry_"), "SECTOR_TYPE", true, true, funct ...

  2. 如何注册facebook应用

    最近项目中要做第三方登录,其中就有facebook的,下面讲解一下如何在facebook中创建应用 1.登录facebook的开发者平台(https://developers.facebook.com ...

  3. Tomcat 开机自启动

    一.安装JDK和Tomcat 1,安装JDK:直接运行jdk-7-windows-i586.exe可执行程序,默认安装即可. 备注:路径可以其他盘符,不建议路径包含中文名及特殊符号. 2.安装Tomc ...

  4. TextView 垂直居中

     需要区分的是这里的top,bottom,ascent,descent,baseline是指字内容的属性,通过getPaint().getFontMetricsInt()来获取得到.和字体内容的外部容 ...

  5. 编写高质量代码改善C#程序的157个建议——建议88:并行并不总是速度更快

    建议88:并行并不总是速度更快 并行所带来的后台任务及任务的管理,都会带来一定的开销,如果一项工作本来就能很快完成,或者说循环体很小,那么并行的速度也许会比非并行要慢. 看这样一个例子,我们比较在同步 ...

  6. Memory Analysis Part 1 – Obtaining a Java Heapdump

    转自: https://blog.codecentric.de/en/2008/07/memory-analysis-part-1-obtaining-a-java-heapdump/ For tro ...

  7. myeclipse设置默认的jsp打开方式

  8. java反射的补充:桥接方法以及Spring中一些工具类

    在上一篇博文中:http://www.cnblogs.com/guangshan/p/4660564.html 源码中有些地方用到了 this.bridgedMethod = BridgeMethod ...

  9. HTML中的内容总结

    一.URL编码类型 对于Get方法,参数是直接通过URL传递的,那这个参数又是根据什么进行编码的呢?对于JSP网页,这个编码是通过第一句描述: <%@ page language="j ...

  10. nutch2.1+mysql+elasticsearch整合linux单机部署

    这次主要介绍下nutch2.1和mysql和elasticsearch的整合,是在单机上运行,并不是分布式部署.1.下载nutch2.1 nutch下载地址:http://labs.mop.com/a ...