题目链接:回文数个数
解题思路:如果暴力枚举的话,肯定会超时,因为最大的时候是十位数,虽然暴力枚举可以算出结果,但是要很长时间。这时候就不能再暴力枚举解决。仔细分析我们可以发现可以通过枚举每一位数来得到回文数的个数。如果是个为数,那么1-9这九个数字可以认为是回文数,两位数的话第一位有1-9 9种选择,第二位有1-9 九种选择,那么两位数中也有9个回文数。三位数开始就不同了,因为回文数从中间分开两侧都是相同的,所以我们可以这么想:第一位有1-9 9种选择,第二位有0-9 十种选择,第三位必须和第一位数相同,所以不用考虑,所以一共有9*10 = 90个回文数。四位只看前两位即可,所以也有9*10 = 90个,五位数比如12321。那么就是9 * 10 * 10 = 900 个。六位比如123321同理,7位比如:1234321 就是9 * 10 * 10 *10 = 9000 个,后边的同理,所以只要累加起来即可。
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int n,flag,sum = 0;
cin>>n;
for(int i=1;i<=n;i++){
flag=(i-1)/2;
sum+=9*pow(10,flag);
}
cout<<sum;
return 0;
}