hdu 4722 Good Numbers ( 找规律 )
Good NumbersTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 549 Accepted Submission(s): 204
Problem Description
If we sum up every digit of a number and the result can be exactly divided by 10, we say this number is a good number.
You are required to count the number of good numbers in the range from A to B, inclusive.
Input
The first line has a number T (T <= 10000) , indicating the number of test cases.
Each test case comes with a single line with two numbers A and B (0 <= A <= B <= 1018).
Output
For test case X, output "Case #X: " first, then output the number of good numbers in a single line.
Sample Input
2
1 10
1 20
Sample Output
Case #1: 0
Case #2: 1
Hint
The answer maybe very large, we recommend you to use long long instead of int.
Source
2013 ACM/ICPC Asia Regional Online —— Warmup2
思路:
多写几个这样的数之后,你会发现这样的数每10个会出现一次,这个数/10+1就是第几个这样的数。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <map> #include <stack> #include <vector> #include <set> #include <queue> #define maxn 1000005 using namespace std; typedef long long ll; ll n,m,ans,le,ri; bool isok(ll u) { ll v,t=0; while(u) { v=u%10; t+=v; u/=10; } if(t%10==0) return true ; return false ; } ll solve(ll u) { int i,j; if(u==-1) return -1; while(!isok(u)) u--; return u/10; } int main() { int i,j,t,test=0; scanf("%d",&t); while(t--) { scanf("%I64d%I64d",&le,&ri); ans=solve(ri)-solve(le-1); printf("Case #%d: %I64d\n",++test,ans); } return 0; }
补充:软件开发 , C++ ,