题目描述: 输入数字 n ,按顺序打印出从 1 最大的 n 位十进制数。

例如:输入 3,则打印出 1、2、3……一直到最大的 3 位数即 999。


分析:

voidPrint1ToMaxOfNDigits(intn){iuntnumber=1;inti=0;while(i++<n)number*=10;for(i=1;i<number;++i)printf("%d\t",i);}

在字符串上模拟数字的加法

voidPrint1ToMaxOfNDigits(intn){if(n<=0)return;char*number=newchar[n+1];memset(number,'0',n);number[n]='\0';while(!Increment(number)){PrintNumber(number);}delete[]number;}

//字符串number表示一个数字,在number上增加1//如果做加法溢出,则返回true;否则为falseboolIncrement(char*number){boolisOverflow=false;intnTakeOver=0;intnLength=strlen(number);for(inti=nLength-1;i>=0;i--){intnSum=number[i]-'0'+nTakeOver;if(i==nLength-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;}}returnisOverflow;}

voidPrintNumber(char*number){boolisBeginning0=true;intnLength=strlen(number);for(inti=0;i<nLength;++i){if(isBeginning0&&number[i]!='0')isBeginning0=false;if(!isBeginning0){printf("%c",number[i]);}}printf("\t");}