1、问题描述
给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为953。
如果输入的数字为负数,返回-1。
2、解题思路
- 1、首先将非负整数每位数字压入vector数组中,其顺序和原数字从左到右一致;
- 2、找出递减数(从大到小排列);
- 3、从所有的递减数找出最大的递减数。
3、代码实现
#include <vector>
using namespace std;
//给出一个非负整数,找到这个非负整数中包含的最大递减数。一个数字的递减数是指相邻的数位从大到小排列的数字。
//如: 95345323,递减数有:953,95,53,53,532,32, 那么最大的递减数为953。
//如果输入的数字为负数,返回-1。
int getMaxDegressiveNum (int num)
{
/*1.异常处理*/
if(num<0) {
return -1;
}
if(num == 0) {
return 0;
}
vector<int> vec;
vector<int> DegressiveNum;
int i = 0,j = 0;
int veclen = 0;
int temp = num;
while(temp) {
DegressiveNum.insert(DegressiveNum.begin(),temp % 10);/*向迭代器之前的位置插入元素*/
vec.insert(vec.begin(),temp % 10);/*向迭代器之前的位置插入元素*/
temp = temp/10;
}
veclen = vec.size();
/*2.找出递减数,数字为1位时,不需要处理*/
for(i=1;i<veclen;i++) {
/*避免越界*/
if(DegressiveNum[i]<DegressiveNum[i-1]) {
vec[i] = vec[i-1]*10+vec[i];
}
}
/*3.找到最大的递减数*/
int MAX = -1;
for(i=0;i<veclen;i++) {
if(MAX<vec[i]) {
MAX = vec[i];
}
}
return MAX;
}