打印从1到最大的n位数
- 题目描写叙述:
-
给定一个数字N。打印从1到最大的N位数。
- 输入:
-
每一个输入文件仅包括一组測试例子。
对于每一个測试案例,输入一个数字N(1<=N<=5)。
- 输出:
-
相应每一个測试案例,依次打印从1到最大的N位数。
- 例子输入:
-
1
- 例子输出:
-
1 2 3 4 5 6 7 8 9
方案1:
void func(int n) { if(n<=0) { return; } int i = 0,max = 1; while(i++ < n) { max *= 10; } for(i = 1; i < max; i++) { cout<<i<<endl; } }
非常遗憾,这个方法不行,假设n太大的话。会溢出。
(对于此题,尽管不溢出,但会超时)
方案2:--->通过
#include<stdlib.h> #include<stdio.h> #include<string.h> bool Increment(char *number) { bool isOverFlow = false;//溢出标志 int takeOver = 0;//进位 int len = strlen(number); for(int i = len-1; i >= 0; i--) { int nsum = number[i] - '0' + takeOver; if(i == len-1)//假设是个位 { nsum++; } if(nsum >= 10)//产生进位 { if(i == 0)//进位的是最高位 { isOverFlow = true; }else { nsum -= 10; takeOver = 1; number[i] = nsum+'0'; } }else//没有进位 { number[i] = nsum + '0'; break; } } return isOverFlow; } void PrintNumber(char *number) { bool flag = true; int i = 0; while(number[i] != '\0') { if(flag && number[i] != '0') { flag = false; } if(!flag) { printf("%c",number[i]); } i++; } printf("\n"); } void func(int n) { if(n<=0) { return; } char *number = (char *)malloc(sizeof(char) * (n+1)); if(!number) { return; } for(int i = 0; i < n; i++) { number[i] = '0'; } number[n] = '\0'; while(!Increment(number)) { PrintNumber(number); } free(number); } int main() { int n; scanf("%d",&n); func(n); return 0; }
方案3:---->通过
採用递归
#include<stdio.h> #include<stdlib.h> #include<string.h> void PrintNumber(char *number) { bool flag = true; int i = 0,count = 0; while(number[i] != '\0') { if(number[i] == '0') { count++; } if(flag && number[i] != '0') { flag = false; } if(!flag) { printf("%c",number[i]); } i++; } if(count != strlen(number)) printf("\n"); } void func1(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; func1(number,length,index+1); } } void func(int n) { if(n <= 0) { return; } char *number = (char*)malloc(sizeof(char)*(n+1)); if(!number) { return; } int i = 0; for(i = 0; i < n; i++) { number[i] = '0'; } number[n] = '\0'; for(i = 0; i < 10; i++) { number[0] = i+'0'; func1(number,n,0); } free(number); } int main() { int n; scanf("%d",&n); func(n); return 0; }