算法
里程表

因为100~1e16中有趣的数总共也只有两万多。所以枚举每个数,看哪些数在给定的范围之间。

string str(5, '1'); string的初始化

stoll()此函数将在函数调用中作为参数提供的字符串转换为long long 。它解析str并将其内容解释为指定基数的整数,并将其作为long long 类型的值返回。

用法:

1
long long int stoll (const string&  str, size_t* idx = 0, int base = 10)
  • 该函数接受三个参数,如下所述:

  • **str:**此参数使用整数表示指定String对象。

  • **idx:**此参数指定指向size_t类型的对象的指针,该对象的值由函数设置为数值后str中下一个字符的位置。此参数也可以是空指针,在这种情况下,将不使用该参数。

  • **base:**此参数指定“数字基数”,以确定用于解释字符的数字系统。如果基数为0,则它使用的基数由序列中的格式确定。默认基数为10。

stoi()此函数将在函数调用中作为参数提供的字符串转换为int。还有stoul(),无符号整数;

stof() ,转化成float;stod(),转化成double

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>

using namespace std;

typedef long long LL;

LL x, y;

int main() {
cin >> x >> y;

int res = 0;
for(int i = 3; i <= 17; i ++) // 枚举位数
for(int j = 0; j < 10; j ++) //枚举每位上相同的数字
for(int k = 0; k < 10; k ++) { // 枚举不相同的数字
if(j == k) continue;
for(int u = 0; u < i; u ++) { // 枚举不行同数字的位置
string s(i, j + '0');
s[u] = k + '0';
if(s[0] != '0' && stoll(s) >= x && stoll(s) <= y)
res ++;
}
}

cout << res << endl;
return 0;
}