打印1到最大的n位数

来源:互联网 发布:淘宝造物节2017图片 编辑:程序博客网 时间:2024/06/05 04:59
//大数问题,n没有限定大小,所以所表示的整数用整形int或者//长整型long long 不能表示,考虑大数问题,最简单的就是用// 字符串或者数组表示大数#include<bits/stdc++.h>using namespace std;bool increment(char* number);void printNumber(char* number);void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index);// ========================方法1===========================void print1ToMaxOfNDigits(int n){    if(n <= 0){        return;    }    char* number = new char[n+1];    memset(number, '0', n);    number[n] = '\0';        while(!increment(number)){        printNumber(number);    }    delete[] number;}// 字符串number表示一个数字,在 number上增加1// 如果做加法溢出,则返回true;否则为falsebool increment(char* number){    bool isOverFlow = false;    int nTakeover = 0;    int length = strlen(number);    for(int i= lenght-1; i>=0; i--){        int nSum = number[i]-'0' + nTakeover;        if(i == length -1){            nSum++;        }        if(nSum >= 10){            if(i == 0){                isOverFlow = true;            } else{                nSum -= 10;                nTakeover =1;                number[i] = '0'+nSum;            }        } else{            number[i] = '0' + nSum;            break;        }    }    return isOverFlow;}// 字符串number表示一个数字,数字有若干个0开头// 打印出这个数字,并忽略开头的0void printNumber(char* number){    bool isBeginning0 = true;    int length =strlen(number);    for(int i=0; i< length; i++){        if(isBeginning0 && number[i] != '0'){            isBeginning0 = false;        }        if(!isBeginning0){            printf("%c", number[i]);        }    }    printf("\t");}//==================================方法2=======================void print1ToMaxOfNDigits_2(int n){    if(n<=0){        return;    }    char* number = new char[n+1];    number[n] = '\0';    for(int i=0; i<10; i++){        number[0] = '0' + i;        Print1ToMaxOfNDigitsRecursively(number, n, 0);    }    delete[] number;}void Print1ToMaxOfNDigitsRecursively(char* number, int length, int index){    if(index == length -1){        printNumber(number);        return;    }    for(int i=0; i<10; i++){        number[index+1] = '0' + i;        Print1ToMaxOfNDigitsRecursively(number, length, index+1);    }}

原创粉丝点击