计蒜客 T1243:回文数个数

题目链接:回文数个数

解题思路:如果暴力枚举的话,肯定会超时,因为最大的时候是十位数,虽然暴力枚举可以算出结果,但是要很长时间。这时候就不能再暴力枚举解决。仔细分析我们可以发现可以通过枚举每一位数来得到回文数的个数。如果是个为数,那么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;
}
发布了69 篇原创文章 · 获赞 57 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41575507/article/details/104601739
今日推荐