经典指数          
原因
1412
浏览数
0
收藏数
 

给定任意一个正整数,求比这个数大且最小的“不重复数”的含义是相邻两位不相同,例如1101是重复数,1231是不重复数?

     举报   纠错  
 
切换
1 个答案
#include #include 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; }
 
切换
撰写答案