恩爱的回文数


题目描述

因为最近身边脱单的人太多了,于是 GBX 狂热的迷上了回文数。因为回文数看起来就像是一对恩爱狗站在一起,他希望自己将来也有那么一天(虽然并不可能)。这一天他突然想到一个问题,长度不大于 n 的自然数中有多少是回文数?因为数据很大,所以最后的结果请对 1000000007 取模。

输入

输入一个 T(T ≤ 100)表示 T 组数据。
对于每组数据输入一个整数 n(1 ≤ n ≤ 10^6 )。

输出

对于每组数据输出一个整数表示回文数的个数对 1000000007 取模的余数。

样例输入

2
1
2

样例输出

 

1019

思路:

       n为1时,个数为10; n为2时,个数为19; n为3时,个数为19+90; n为4时,个数为109+90;

       规律为3位数时为90,4位数时为90,5位数为900,6位数为900.....
代码:

#include<stdio.h>
int main()
{
	int mod = 1000000007;
	int i,j,t,n,c;
	long long sum = 0,s;
	scanf("%d",&t);
	while(t--)
	{
		s = 90;
		c = 0;
		scanf("%d",&n);
		if(n == 1)
		{
			printf("10\n");
			continue;
		}
		if(n == 2)
		{
			printf("19\n");
			continue;
		}
		sum = 19;
		for(i = 3;i <= n;i ++)
		{
			if(c == 2) //用c来记录次数,每两次次数*10
			{
				s= (s*10)%mod;
				c = 1;
			}
			else
				c++;
			sum = (sum+s) % mod;
		}
		printf("%lld\n",sum%mod);
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值