CSU 1642 Problem B

来源:互联网 发布:徐志雷ti7知乎 编辑:程序博客网 时间:2024/04/30 18:03

1642: Problem B

Time Limit: 3 Sec  Memory Limit: 128 MB
Submit: 129  Solved: 27
[Submit][Status][Web Board]

Description

已知两个正整数a和b,求在a与b之间(包含a和b)的所有整数的十进制表示中1出现的次数。

Input

多组数据(不超过100000组),每组数据2个整数a,b.(1≤a,b≤1000000).

Output

每组数据的答案占一行。

Sample Input

1 1010 1002 1

Sample Output

2201

HINT

Source


选拔赛的时候,这题WA了好多次。

今天重做了一下过了。

其实就是打表。现在看来也挺水的一道题。

可为什么当时没做出来呢,因为那时候水平还达不到。

方法:先从1到最大值打表。上一个状态1出现的个数,加上当前数字1的个数。然后区间两个值一减即可。


#include <stdio.h>#define N 1000005int dp[N];int getcnt(int x){    int cnt=0;    while(x>0)    {        if(x%10==1)            cnt++;        x/=10;    }    return cnt;}void gettable(){        for(int i=1;i<=1000000;i++)                dp[i]=getcnt(i)+dp[i-1];}int main(){        gettable();        int a,b;        while(scanf("%d%d",&a,&b)>0)                printf("%d\n",b>a?dp[b]-dp[a-1]:dp[a]-dp[b-1]);        return 0;}


0 0
原创粉丝点击