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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值