打印1到最大的n位数
来源:互联网 发布:网易邮mac 编辑:程序博客网 时间:2024/05/14 12:04
题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印1、2、3一直到最大的3位数即999。
解答:这里打印1到n位最大的数,当n变大的时候,无法用int存储,所以本题就是大数问题。考虑用字符串存储。
bool Increment(char *num){int increment=0; //进位int length=strlen(num);for(int i=length-1;i>=0;i--){int value=num[i]-'0'+increment;if(i==length-1)value++;if(value==10) //该位加到最大及9{if(i==0) //加到最大的n位数字,返回。return false;else{increment=1;value=0;num[i]='0';}}else{num[i]='0'+value;break;}}return true;}void Print(char *num){int length=strlen(num);int i=0;while(num[i]=='0')i++;for(int j=i;j<length;j++)cout<<num[j];cout<<'\t';}int main(){int n;cin>>n;if(n<=0)return 0;char *num=new char[n+1];for(int i=0;i<n;i++)num[i]='0';num[n]='\0';while(Increment(num))Print(num);delete []num;return 0;}
以下是递归算法,就是输出n位数字的全排列。
void Print(char *num){int n=strlen(num);int i=0;while(num[i]=='0')i++;for(int j=i;j<n;j++)cout<<num[j];cout<<'\t';}void Print2(char *num,int length,int index){if(index==length-1){Print(num);return;}for(int i=0;i<10;i++){num[index+1]=i+'0';Print2(num,length,index+1);}}void Print1(int n){if(n<=0)return;char *num=new char[n+1];num[n]='\0';for(int i=0;i<10;i++){num[0]='0'+i;Print2(num,n,0);}delete [] num;}int main(){int n;cin>>n;Print1(n);return 0;}
0 0
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的n位数
- 打印1 到最大的n位数
- 打印1到最大的n位数
- 打印1到最大的N位数
- 自定义check_mk监控插件过程中遇到的问题1
- 体验成员函数
- [学习笔记]android的onCreate和Button的使用
- 图像处理和计算机视觉中的经典论文整理
- 在嵌入式linux执行程序not found有关问题的解决
- 打印1到最大的n位数
- Android应用被强制停止后无法接受广播解决方案
- or1200处理器对数据相关的处理方法
- eclipse开发与调试ndk时碰到的一些问题与解决
- 技术不为赚钱 只为改变社会
- 旅行商模型
- linux 内核学习 tasklet 详解
- 设备号的静态申请与动态分配
- android aidl接口的理解