给出任意一个正整数,算出大于它的最小不重复数——最高效[2014百度笔试题]

简介: <p>程序很简单,一看就懂,我就不多介绍了,直接上代码。</p> <p></p><pre code_snippet_id="191807" snippet_file_name="blog_20140217_1_7068119" name="code" class="cpp">/** * 给出任意一个正整数,算出大于它的最小不重复数(即不存在相邻两个数相同的情况) */#inclu

程序很简单,一看就懂,我就不多介绍了,直接上代码。

/**
 * 给出任意一个正整数,算出大于它的最小不重复数(即不存在相邻两个数相同的情况)
 */
#include<iostream>

using namespace std;

long minNoDoubleNumber(long x) {
	if(x < 10) {
		return x;
	}

	long y = 1;
	long temp = x;
	while(temp / 10 > 0) {
		y *= 10;
		temp /= 10;
	}
	y /= 10;

	int next = -1;
	bool hasPlus = false;
	while(y > 0) {
		next = (x / 10 / y) % 10;
		if((x / y) % 10 == next) {
			if(!hasPlus) {
				x += y;
				hasPlus = true;
				if(9 == next) {
					return minNoDoubleNumber(x);
				}
			} else {
				x -= y;
				if(0 == next) {
					return minNoDoubleNumber(x);
				}
			}
		} else {
			y /= 10;
		}
	}
	return x;
}

int main(void) {
	long x;
	cout<<"x=";
	cin>>x;
	cout<<"result="<<minNoDoubleNumber(x)<<endl;
}


程序文件见:https://github.com/wenin819/wenin819/blob/master/src/number/min_no_double_number.cpp

相关文章
|
8月前
|
Python
一个大于1的自然数,除了1和它本身外,不能被
一个大于1的自然数,除了1和它本身外,不能被
|
8月前
|
算法 搜索推荐 程序员
第四十七练 请以递归方式实现计算整数列表的最大值
第四十七练 请以递归方式实现计算整数列表的最大值
57 2
|
8月前
[leetcode 数位运算] 2578.最小分割和
[leetcode 数位运算] 2578.最小分割和
|
8月前
|
算法 Java
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
75 0
每日一题《剑指offer》数组篇之数组中出现次数超过一半的数字
|
算法
求两个数对应二进制位不同的个数(深度剖析+补充例题)
求两个数对应二进制位不同的个数(深度剖析+补充例题)
186 0
求两个数对应二进制位不同的个数(深度剖析+补充例题)
|
测试技术
软件测试面试题:如果一个数恰好等于它的因子之和,则称该数为“完全数”,又称完美数或完备数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加, 1+2+3=6。第二个完全
软件测试面试题:如果一个数恰好等于它的因子之和,则称该数为“完全数”,又称完美数或完备数。 例如:第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加, 1+2+3=6。第二个完全
476 0
1414. 和为 K 的最少斐波那契数字数目 : 详解为何「每次选择不超过当前 k 的最大数」的可行解为最优解
1414. 和为 K 的最少斐波那契数字数目 : 详解为何「每次选择不超过当前 k 的最大数」的可行解为最优解
漫画:去掉一个数,如何让剩余的数乘积最大?
举个例子,给定如下数组:要删除哪个元素,才能使得剩余元素的乘积最大呢?
117 0
漫画:去掉一个数,如何让剩余的数乘积最大?
|
C语言 UED
[解题报告]【第36题】给定一个数,判断这个数是不是素数
[解题报告]【第36题】给定一个数,判断这个数是不是素数
[解题报告]【第36题】给定一个数,判断这个数是不是素数
|
算法 Java C#
【算法千题案例】⚡️每日LeetCode打卡⚡️——59.最大连续 1 的个数
📢前言 🌲原题样例:最大连续 1 的个数 🌻C#方法:一次遍历 🌻Java 方法:一次遍历 💬总结
【算法千题案例】⚡️每日LeetCode打卡⚡️——59.最大连续 1 的个数