/* 如果一个数字十进制表达时,不存在连续两位数字相等,则称之为“不重复数”。例如,105,1234和12121都是“不重复数”,而11,100和 1225不算。给定一个long类型数字A,返回大于A的最小“不重复数”。 */ #include <iostream> #include <string> #include <deque> #include <vector> #include <iterator> using namespace std; int StrtoDeq(long Num, deque<int>& BitDeq) { BitDeq.clear(); while(Num/10) { BitDeq.push_front(Num % 10); Num /= 10; } BitDeq.push_front(Num); return 0; } bool BeRepeatNumber(deque<int>& BitDeq) { bool btransform = false;; for (int i = 0; i + 1 < BitDeq.size(); ++i) { if (BitDeq[i] == BitDeq[i + 1]) btransform = true; } return btransform; } int FindNoRepeatNumber(deque<int>& BitDeq) { bool bctu = true; while (bctu) { bctu = false; int i = 0; for ( ; i < BitDeq.size(); ++i) { int j = i + 1; if (j >= BitDeq.size()) break; if (BitDeq[i] == BitDeq[j]) { bctu = true; for (int t = j; t > -1; --t) { BitDeq[t]++; if (BitDeq[t] == 10) { BitDeq[t] = 0; if (t == 0) { BitDeq.push_front(1); break; } }else break; } int k = i + 2; for ( ; k + 1< BitDeq.size(); k += 2) { BitDeq[k] = 0; BitDeq[k + 1] = 1; } BitDeq[k] = 0; break; } } } } int main() { long Num; cout<<"Please Input N: "<<endl; cin >> Num; deque<int> BitDeq; ++Num; StrtoDeq(Num, BitDeq); if (BeRepeatNumber(BitDeq)) FindNoRepeatNumber(BitDeq); cout<<"The result is: "<<endl; copy(BitDeq.begin(), BitDeq.end(), ostream_iterator<int>(cout, "")); cout<<endl; return 0; }