1. //打印从1到最大的n位数:大数问题,用字符串表示数字来避免溢出
  2. bool increment(char* number){
  3. bool isOverFlow = false;
  4. int nTakeOver = 0;
  5. size_t strLength = strlen(number);
  6. for (size_t i = strLength - 1; i >= 0; --i){
  7. int nSum = number[i] - '0' + nTakeOver;
  8. if (i == strLength - 1)
  9. nSum++;
  10. if (nSum >= 10){
  11. if (i == 0){
  12. isOverFlow = true;
  13. break;
  14. }
  15. nSum -= 10;
  16. nTakeOver = 1;
  17. number[i] = nSum + '0';
  18. }
  19. else{
  20. number[i] = nSum + '0';
  21. break;
  22. }
  23. }
  24. return isOverFlow;
  25. }
  26. void printNumber(char* number){
  27. size_t strLength = strlen(number);
  28. int i = 0;
  29. while (number[i] == '0') {i++;}
  30. for (; i < strLength; ++i)
  31. printf("%c", number[i]);
  32. printf("\t");
  33. }
  34. void print1ToMaxOfNDigits(int n){
  35. if (n <= 0)
  36. return;
  37. char* number = new char[n + 1];
  38. memset(number, '0', n);
  39. number[n] = '\0';
  40. while (!increment(number))
  41. printNumber(number);
  42. delete []number;
  43. return;
  44. }
  45. //方法二:全排列方法,递归实现
  46. void print1ToMaxDigitsRecursively(char* number, int length, int index){
  47. if (index == length - 1)
  48. printNumber(number);
  49. else{
  50. for (int i = 0; i < 10; ++i){
  51. number[index + 1] = '0' + i;
  52. print1ToMaxDigitsRecursively(number, length, index+1);
  53. }
  54. }
  55. }
  56. void print1ToMaxOfNDigits2(int n){
  57. if (n <= 0)
  58. return;
  59. char* number = new char[n + 1];
  60. for (int i = 0; i < 10; ++i){
  61. number[0] = i + '0';
  62. print1ToMaxDigitsRecursively(number, n, 0);
  63. }
  64. return;
  65. }

大数问题:打印从1到最大的n位数的更多相关文章

  1. 剑指 Offer 17. 打印从1到最大的n位数

    剑指 Offer 17. 打印从1到最大的n位数 Offer 17 题目解析: 暴力解法 package com.walegarrett.offer; /** * @Author WaleGarret ...

  2. 力扣 - 剑指 Offer 17. 打印从1到最大的n位数

    题目 剑指 Offer 17. 打印从1到最大的n位数 思路1 如果有n位,那么最大值就是\(10^n-1\),即如果n是2,那么最大就到输出到99 考虑到大数情况,所以使用字符数组 还要把字符数组转 ...

  3. 剑指Offer:打印从1到最大的n位数

    题目:输入数值n,按顺序打印从1到最大的n位数,例如输入n=3,则从1,2,3,一直打印到999 陷阱:若使用循环遍历 1- 999...9 并依次输出,当位数n过大时,无论将其存入int或long或 ...

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

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

  5. 大数相加和大数相乘以及打印从1到最大的n位数

    string add(string a, string b){ int nlength; int diff; if (a.size() > b.size()){ nlength = a.size ...

  6. 打印从1到最大的n位数(考虑大数问题)

    void Print1ToMaxOfNDigits(int n) { if(n <= 0) { return; } int * number = new int[n]; for(int i = ...

  7. 剑指offer 打印从1到最大的n位数

    题目描述: 输入数字n,按顺序打印出从1到最大的n位十进制数.比如输入3,则打印出1.2.3一直到最大的3位数999. 分析:注意不能直接输入最大的n位十进制数,因为可能属于大数,这个数无法用int或 ...

  8. 打印从1到最大的n位数

    //和剑指offer程序基本一致,不过print和进位两部分合并在一个程序中 //如果把其分拆,进行适当的整理,代码会更加整洁 void PrintToMaxOfDigitsN(int n) { ) ...

  9. 大数运算:HDU-1042-N!(附N!位数的计算)

    解题心得: 这里使用了10000进制.很明显,因为是n!所以单个最大的数是10000*10000,使用万进制. 可以借鉴高精度的加法,单个乘了之后在进位. 很坑的一点,0!=1,数学不好WA了三次,尴 ...

随机推荐

  1. Spring阅读方法

    转自:http://www.cnblogs.com/xing901022/p/4178963.html 最近没什么实质性的工作,正好有点时间,就想学学别人的代码.也看过一点源码,算是有了点阅读的经验, ...

  2. mvc 下的 signalR使用小结

    https://my.oschina.net/u/867090/blog/123474

  3. 【bzoj2819】Nim

    Description 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游 ...

  4. CentOS服务器运维监控Nagios(一)

    CentOS下搭建Nagios 王尚 2014.11.09 操作系统:CentOS-6.5-i386-bin-DVD1.iso 安装在VM中进行测试的. 本章需要的软件链接: php-5.3.2.ta ...

  5. python常用模块(1):collections模块和re模块(正则表达式详解)

    从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来 ...

  6. VM虚拟机的配置

    1.软件安装 点击如图所示文件安装虚拟机 点击下一步,再安装过程中输入密钥 1F04Z-6D111-7Z029-AV0Q4-3AEH8 设置相关内容完成安装 2.加载虚拟机 点击软件图标打开软件 软件 ...

  7. hdu--2570--迷瘴

    #include<iostream> #include<vector> #include<algorithm> using namespace std; int m ...

  8. Fancytree Javascript Tree的入门使用

    Fancytree Javascript Tree的入门使用 一.概念----是做什么的能干什么 Fancytree是一个Javascript控件,它依赖于: <script src=" ...

  9. java配置mongo最大连接数

    最近做压测,其中有个交易涉及到对mongo的操作. 单机压到1500UV的时候出现如下错误: 一看,原来是mongo配置的最大连接数不够: 我们来看看mongo的官方文档: connectionPer ...

  10. 【新发现】不用苹果开发账号就能申请ios证书真机调试

    虽然xcode现在可以免证书进行测试了,但众多跨平台开发者,如果还没注册苹果开发者账号. 想安装到自己非越狱手机测试是无能为力了. 不过新技术来了,只需要普通免费的苹果账号无需付费成为开发者就可以申请 ...