链接:https://www.nowcoder.com/questionTerminal/7442938f5012486499ddd61ce16f9086
来源:牛客网
如果一个数字满足以下条件,我们就称它为奇异数:
1、这个数字至少有两位
2、这个数的最低两位是相同的
比如: 1488是一个奇异数,而3、112不是。
牛牛现在给出一个一个区间[L,R],让你计算出在区间内有多少个奇异数
思路:开始想用long long数字来储存输入的数字,然后分别取十位和个位来比较确定,结果显示耗时过长,改变思路,经过测试从1到100一共有十个奇异数,是否可以算出L到R有多少个100再除十加上十分位的奇异数,还是麻烦,最后[L,R]可以换上[1,R]-[1,L-1]的值,得到结果。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long realnum(long long num)
{
long long result = 0;
if (num < 10)
{
return result;
}
else
{
int small = num % 100;
long long large = num / 100;
result += small / 11 + large * 10;
}
return result;
}
int main()
{
long long begin, end;
cin >> begin >> end;
cout << realnum(end) - realnum(begin-1);
}