// 面试题12_打印1到最大的n位数.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> using namespace std; 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++; if(nSum>=10) { if(i==0)//若是首位满10,则到了最大的n位 isOverflow=true; else { nSum-=10; nTakeOver=1;//若满10则上一位加1 number[i]='0'+nSum; } } else { number[i]='0'+nSum; break; } } return isOverflow; } void PrintNumber(char *number) { bool isBeginning0=true; int nLength=strlen(number); for(int i=0;i<nLength;++i) { if(isBeginning0&&number[i]!='0') { isBeginning0=false; } if(!isBeginning0) { cout<<number[i]; } } cout<<"\t"; } 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; } int _tmain(int argc, _TCHAR* argv[]) { Print1ToMaxOfNDigits(3); return 0; }
字符串是一个简单、有效的表示大数的方法。