题目大意 | 如果一个数字是回文并且其除去前导零的十进制表示的长度是偶数,我们将其称为zcy数。数字是回文意味着当以十进制表示形式写入时,它不包含前导零同时向前和向后读的数字是相同的。例如,12321和1221是回文,123和12451不是。而且,1221是zcy号而12321不是。给定整数k和p,计算k个最小zcy数的和,并输出该和模p后的值。 |
---|
输入数据 | The first line contains two integers k and p (1 ≤ k ≤ $10^5$, 1 ≤ p ≤ $10^9$). |
数据输出 | Output single integer — answer to the problem. |
样例输入 | 2 100 |
样例输出 | 33 |
样例输入 | 5 30 |
样例输出 | 15 |
思路简述
- 此题的主要关键就是回文数,11、1221这样的回文数,并且判断回文数的大小。
- 这破题的关键就是这类回文数的一个规律:回文数1221是由12翻转而来,并且13翻转过来的1331一定大于1221。
- 所以我的思路就是,通过一个数对称一下,生成一个回文数,然后相加,取模
#include<stdio.h>
long long n,k,p,sum;
int main()
{
while(~scanf("%d %d",&k,&p))
{
sum = 0;
for(int i = 0;i <= k;i++)
{
n = i;
int temp = i;
while(temp)
{
n = n * 10+ temp%10;
temp /= 10;
}
sum += n%p;
}
printf("%d\n",sum%p);
}
return 0;
}
问题
- 在提交代码的过程中,我遇到一个问题,就是long long必须定义为全局变量,如果是局部变量会报TLE,这是为什么?