zoukankan      html  css  js  c++  java
  • 面试题12:打印1到最大的n位数(大数问题)

    面试题是关于n位整数并且没有限定n的取值范围,或者是输入任意大小的整数,那么这个题目就很可能需要考虑大数问题。字符串是一个简单的、有效的表示大数的方法

    这题比较难,用递归表达全排列,数字每一位都可能是0-9,从高位往低位设置

     1 void Print1ToMaxOfNDigits_2(int n)
     2 {
     3     if(n <= 0)
     4         return;
     5  
     6     char* number = new char[n + 1];
     7     number[n] = '';
     8  
     9     for(int i = 0; i < 10; ++i)
    10     {
    11         number[0] = i + '0';
    12         Print1ToMaxOfNDigitsRecursively(number, n, 0);
    13     }
    14  
    15     delete[] number;
    16 }
    17  
    18 void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index)
    19 {
    20     if(index == length - 1)
    21     {
    22         PrintNumber(number);
    23         return;
    24     }
    25  
    26     for(int i = 0; i < 10; ++i)
    27     {
    28         number[index + 1] = i + '0';
    29         Print1ToMaxOfNDigitsRecursively(number, length, index + 1);
    30     }
    31 }
    32 
    33 // 字符串number表示一个数字,数字有若干个0开头
    34 // 打印出这个数字,并忽略开头的0
    35 void PrintNumber(char* number)
    36 {
    37     bool isBeginning0 = true;
    38     int nLength = strlen(number);
    39  
    40     for(int i = 0; i < nLength; ++ i)
    41     {
    42         if(isBeginning0 && number[i] != '0')
    43             isBeginning0 = false;
    44  
    45         if(!isBeginning0)
    46         {
    47             printf("%c", number[i]);
    48         }
    49     }
    50  
    51     printf("	");
    52 }
  • 相关阅读:
    将cvs迁移到svn
    wincvs,cvs,svn
    Open Source Camp 北京 2008技术交流盛会 感悟
    21,22,23,24日外出纪要
    10.31,11.1外出纪要
    虚拟经济区一行有感
    29,30号活动预告
    ror 2.1.2migration
    netbeans 6.5 release
    [转载]ruby on rails 每周精选二
  • 原文地址:https://www.cnblogs.com/raichen/p/5640363.html
Copyright © 2011-2022 走看看