输入数字n,顺序打印出1到n位的十进制最大数
来源:互联网 发布:美少女梦工厂 mac 编辑:程序博客网 时间:2024/04/28 21:40
转自:点击打开链接
题目描述:输入数字n,顺序打印出1到n位的十进制最大数,例如n = 2,即打印出1 , 2 , 3 ...... 97 , 98 , 99;
思路一:
最大n位十进制数:999.......9999 ,共有n位;易知:其为()
循环从1--输出;但是这里的为int类型,或者long long 类型;
但是若n很大时,极易造成溢出;且此题考查的很有可能就是应聘者对大数问题解决办法;
思路二:
利用字符串、数组表示大数;本题在字符串上模拟加法,逐步对每个位置进行赋值;
若输入为n , 则需要n+1长度的字符串Number(最后一位:结束符号'\0')。且Number[i]的取值范围是:'0' -- '9';
若Number[i] < '9' : Number[i] ++
若Number[i] > '9' :Number[i] - 10,向前一位Number[i - 1] 进1
若Number[0] > '9' :则数中的最高位需要向前一位进1,将会出现溢出;(结束条件)
变量:
位数:int n
字符串:char* Number = new char[n + 1]
字符串长度:nLength = strlen(Number)
进位:int TakeOver = 0
溢出:bool OverFlow = false
每位累加:int nSum = Number[ i ] - '0' + TakeOver
思路三:
n位的所有十进制数,每位取值范围0 --- 9 , 那么其就是n位全排列;
首先设置首位的表达范围0---9;然后递归设置后一位0--9;
结束条件:最后一位Number[n - 1] == 9
#include<iostream>#include<memory>using namespace std;//--------------------------------------------------------------------------------------------------------------------- bool Increment(char* number);void PrintNumber(char* number);void Print1ToN_Recursion(char* number , int n , int index);//------------------------------------------------------------方法一--------------------------------------------------//函数参数:整数n//函数功能:按照顺序打印出1--n位最大十进制数void Print1ToN_Soulation1(int n){if(n <= 0)return;char* number = new char[n + 1];number[n] = '\0';//对number[]初始化:'0' memset(number , '0' , n);while(!Increment(number)){PrintNumber(number);}delete[] number;}//函数参数:字符串:number[]//函数功能:在表示数字的字符串上加一,实现加法bool Increment(char* number){bool OverFlow = false;int takeOver = 0;int nLength = strlen(number);for(int i = nLength - 1; i >= 0; i--){int nSum = number[i] - '0' + takeOver;if(i == nLength - 1)nSum++;if(nSum >= 10){if(i == 0)OverFlow = true;else{nSum -= 10;takeOver = 1;number[i] = nSum + '0';}}else{number[i] = nSum + '0';break;}}return OverFlow;}//----------------------------------------------方法二----------------------------------------------------------------//函数参数:整数n//函数功能:按照顺序打印出1--n位最大十进制数void Print1ToN_Soulation2(int n){if(n <= 0)return;char* number = new char[n + 1];number[n] = '\0';for(int i = 0; i < 10; i++){number[0] = i + '0';Print1ToN_Recursion(number , n , 0);}delete [] number;}//函数参数:字符串:number[] , 长度:length , 下标索引:index//函数功能:对number[i] 递归进行赋值(0--9),最终输出numbervoid Print1ToN_Recursion(char* number , int nlength , int index){if(index == nlength - 1){PrintNumber(number);return;}for(int i = 0; i < 10; i++){number[index + 1] = i + '0';Print1ToN_Recursion(number , nlength , index + 1);}}//函数参数:输出字符串//函数功能:字符串number[]void PrintNumber(char* number){bool Ishead = true;int nlength = strlen(number); for(int i = 0; i < nlength; i++){if(Ishead && number[i] != '0')Ishead = false;if(!Ishead)printf("%c" , number[i]);}printf("\t");}
- 输入数字n,顺序打印出1到n位的十进制最大数
- 输入数字n,按顺序打印出从1到最大的n位十进制数
- 输入数字n,按顺序打印出从1到最大的n位十进制数
- 输入数字n,按顺序打印出从0到最大n位十进制数
- 打印1到最大的n位数 题目:输入数字n,按顺序打印出从1最大的n位十进制数。
- 输入数字n,按顺序打印出1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。
- 面试题12:输入数字n,按照顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999
- 题目:输入数字n,按顺序打印从1到n位十进制数;
- 打印出从1到最大的n位十进制数,如输入3 打印 1到 999
- 输入数字n,打印1到最大的n位数
- 输入数字n,按顺序输出从1到最大的n位10进制数
- 第3天 打印1到最大的N位十进制数
- (《剑指offer》笔记)打印从1到最大的N位十进制数
- 打印1到n位最大数
- 剑指offer--打印1到最大的N位数字
- 1.输入n,打印一到n位最大数字,比如输入3,打印1到999
- 输入n,输出从1到n位最大十进制数。例如输入2,输出1、2...99
- 输入数字n,按顺序输出从1最大的n位10进制数
- 【CBIR】基于内容的图像检索技(CBIR)术相术介绍
- 对链表进行归并排序
- 使用SWING组件创建数据库应用程序
- 二维数组动态分配空间
- hdu1102
- 输入数字n,顺序打印出1到n位的十进制最大数
- JavaEE体系架构概述
- 设计模式_迭代器模式
- java学习之C语言基础2
- 防止qq代码攻击 (linkey)
- 查找
- poj2318(叉积判断点的位置+二分查找)
- DBMS_JOB
- Web部署一(目录机构以及Url-pattern)