这里用到了sstream库中的stringstream类。
#include <iostream>
#include<stdlib.h>
#include<string>
#include<vector>
#include<set>
#include<math.h>
#include<map>
#include<unordered_map>
#include<algorithm>
#include<functional>
#include<queue>
#include<sstream>
typedef long long ll;
using namespace std;
map<char, char>mymap;//key为元素,value为该元素翻转180度后的结果
vector<int>v = {0,1,6,8,9};
int MaxValue;
int counts = 0;
void init() {
mymap.insert(pair<char, char>('1', '1'));
mymap.insert(pair<char, char>('0', '0'));
mymap.insert(pair<char, char>('6', '9'));
mymap.insert(pair<char, char>('9', '6'));
mymap.insert(pair<char, char>('8', '8'));
}
//只需要反转后大小不相等就行,因为遍历时已经保证数字只会是v中的0,1,6,8,9
bool isConfuse(ll num) {
stringstream ss;
ss<< num;
string str;
ss >> str;
for (int i = 0; 2*i < str.length(); i++) {
if (mymap[str[i]] != str[str.length() - 1 - i]) //要减去1啊
{
//cout <<num<<"----"<< mymap[str[i]] << " : " << str[str.length() - 1 - i] << endl;
return true;
}
}
return false;
}
void process(ll num) {
if (num > MaxValue)
return;
if (isConfuse(num)) {
counts++;
//cout <<counts<<":"<< num << endl;
}
for (int i = 0; i < v.size(); i++)
process(num * 10 + v[i]);
}
int main() {
init();
MaxValue = 100;
for (int i = 1; i < v.size(); i++) {
process((ll)v[i]);
}
cout <<counts;
system("pause");
return 0;
}