首页 > 试题广场 >

给定任意一个正整数,求比这个数大且最小的“不重复数”的含义是

[问答题]
给定任意一个正整数,求比这个数大且最小的“不重复数”的含义是相邻两位不相同,例如1101是重复数,1231是不重复数?
#include <iostream>
#include <string>
using namespace std;

int main()
{
	int i = 0;
	char c = 0;
	long num = 0;
	cin >> num;
	string strNum = std::to_string(num+1);

	int nHightLength = strNum.length();
	do {
		//查找相邻的重复数
		i = 0;
		do {
			c = strNum[i];
		} while (++i < nHightLength && c != strNum[i]);	//在高位遍历

		//有重复位数,截取高位加1,替换原有的高位
		if (i != nHightLength)
		{
			string substr = strNum.substr(0, i+1);  //截取存在重复的高位
			nHightLength = substr.length();
			long nHignt = stol(substr) + 1;			//加1
			strNum.replace(strNum.begin(), strNum.begin() + i + 1, std::to_string(nHignt));
		}
	} while (i != nHightLength);	//如果循环中有重复,则再次循环,如99+1=100出现了两个0

	//尾部填充0或1,判断填充前高位的最后一个是0还是1
	bool change = strNum[nHightLength - 1] - '0';
	for (int i = nHightLength; i < strNum.length(); ++i, change = !change)
	{
		strNum[i] = change ? '0' : '1';
	}

	cout << strNum << endl;
	system("pause");
	return 0;
}

编辑于 2017-08-17 16:38:08 回复(0)