劍指offer——列印從1到最大的n位數
阿新 • • 發佈:2019-01-04
題目:輸入數字n,按順序打印出從1到最大的n位十進位制數。
解題思路:首先要想到這是一道大數題,用字串儲存每一位數字,然後要想到利用每一位的全排列來遞迴求解。從最後一位開始。若n=2,則字串大小為3,str[2]='\0',分別從01,02,03 ...,99。所以利用遞迴每次index=3時,就可以列印。列印的時候要注意把字串前面的0去掉。
#include <stdio.h> #include <string.h> using namespace std; void printnum(char *str) { int len=strlen(str); int num=0; int i=0; for(i=0;i<len;i++) { if(num==0&&str[i]=='0') { continue; } num=1; printf("%c",str[i]); } if(num==1) printf("\t"); return ; } void print(char *str,int n,int index) { if(index==n-1) { printnum(str); return ; } for(int i=0;i<10;i++) { str[index+1]=i+'0'; print(str,n,index+1); } } void printton(int n) { char *str=new char[n+1]; str[n]='\0'; for(int i=0;i<10;i++) { str[0]='0'+i; print(str,n,0); } delete []str; } int main() { int n=2; printton(n); return 0; }