面接問題17:1から最大n桁まで印刷


1から最大n桁まで印刷
  • タイトル説明
  • 高効率解法
  • タイトルの説明
    数字nを入力し、1から最大n桁までの10進数を印刷します.
    //       +1
    //         n->0
    bool  Increment(char *number)
    {
        bool isOverflow = false;
        int nTakeOver = 0;
        int nLength = strlen(number);
        for(int i=nLength-1; i>=0; i--)
        {
            int nSum = number[i] - '0' + nTakeOver;
            if(i == nLength - 1)
            {
                nSum ++;//   +1
            }
            
            if(nSum >= 10)
            {
                if(i == 0) isOverflow = true;
                else
                {
                    nSum = nSum - 10;
                    nTakeOver = 1;
                    number[i] = nSum + '0';
                }
            }
            
            else
            {
                number[i] = nSum + '0';
                break;
            }
            
        }
        return isOverflow;
    }
    
    void PrintNumber(char *number)
    {
        int nLength = strlen(number);
        int start = false;
        for(int i=0; i

    こうりつかいほう
    n個の0-9からの全配列
    主関数により第1ビット(最上位)0-9出力を制御し、内部再帰、最後のビットを固定するたびに出力、その他は右から左へ再帰配列する