码迷,mamicode.com
首页 > 其他好文 > 详细

剑指offer-面试题17-打印从1到最大的n位数-数字

时间:2019-11-14 21:29:55      阅读:53      评论:0      收藏:0      [点我收藏+]

标签:mem   div   数字   new   stream   offer   字符串   main   namespace   

/*
题目:
	输入数字n,按顺序打印从1到最大的n位十进制数。
	如输入3,打印从1,2,3到999。
*/
/*
思路:
	大数问题转化为字符串或数组。
*/
#include<iostream>
#include<string.h>
#include<algorithm>
#include<cmath>
#include<stdio.h>
using namespace std;

bool Increment(char* numbers,int n){

    for(int i = n-1; i >= 0; i--){
        if(numbers[i] < ‘9‘){
            numbers[i] += 1;
            return true;
        }else{
            numbers[i] = ‘0‘;
        }
    }
    if(numbers[0] == ‘0‘) return false;
    return true;
}

void PrintNumbers(char* numbers,int n){
    int i = 0;
    while(numbers[i] == ‘0‘){
        i++;
    }
    for(int j = i; j < n; j++){

        printf("%c",numbers[j]);
    }
    printf("\n");
}


void PrintToMaxOfDigits(int n){
    if(n <= 0) return;
    char* numbers = new char[n+1];
    memset(numbers,‘0‘,n);
    numbers[n] = ‘\0‘;
    while(Increment(numbers,n)){
        PrintNumbers(numbers,n);
    }
    delete[] numbers;
}


int main(){
    PrintToMaxOfDigits(3);
}

   

剑指offer-面试题17-打印从1到最大的n位数-数字

标签:mem   div   数字   new   stream   offer   字符串   main   namespace   

原文地址:https://www.cnblogs.com/buaaZhhx/p/11862645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!