首页 > 代码库 > 打印从1到最大的n位数
打印从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; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。