
http://acm.hdu.edu.cn/showproblem.php?pid=4722
【题意】:
找GoodNumbers一个数N,如果它每一个位数字之和可以整除10,那么它就是GoodNumbers,比如451就是一个4+5+1=10,求[A,B]之间这样的数的个数
【题解】:
先写一个暴力代码用来找规律
发现: 0-10 1
0-100 10
0-1000 100
0-990 99
0-992 100
0-997 100
基本规律为 n/10 + (1或0)
加1的情况为:n/10*10 到 n 有满足条件的 比如:997: 99 + (990到997是否有满足条件的,如果有则加1)
【code】:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm> using namespace std; int isOne(__int64 n) //例如:456计算450-456有没有符合条件的数
{
int s=;
__int64 i=n/*;
__int64 m = n;
for(;i<=m;i++)
{
n=i;
s=;
while(n)
{
s+=n%;
n/=;
}
if(s%==) return ;
}
return ;
} __int64 getNum(__int64 n)
{
if(n<) return ;
if(n<=) return ;
return n/+isOne(n);
} int main()
{
int t,cas=;
scanf("%d",&t);
while(t--)
{
__int64 a,b;
scanf("%I64d%I64d",&a,&b);
printf("Case #%d: %I64d\n",cas++,getNum(b)-getNum(a-));
}
return ;
}