当前位置: 代码迷 >> 综合 >> NYOJ - 1的个数
  详细解决方案

NYOJ - 1的个数

热度:6   发布时间:2024-01-20 17:57:11.0

1的个数

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 3
描述
给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:
1024 1025 1026 1027 1028 1029 1030 1031 1032
则有10个1出现在这些数中。
输入
输入不会超过500行。每一行有两个数a和b,a和b的范围是0 <= a, b <= 100000000。输入两个0时程序结束,两个0不作为输入样例。
输出
对于每一对输入的a和b,输出一个数,代表1出现的个数。
样例输入
1 10
44 497
346 542
0 0
样例输出
2
185
40

#include <stdio.h>
int pow[10] = {1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
int fun(int n)
{if(n < 0) return 0;int i = 0,a = n,s = 0;while(a){int tmp = a%10;if(tmp > 1) s += pow[i];else if(tmp == 1)s += n%pow[i] + 1;s += tmp*i*pow[i-1];a /= 10,i++;}return s;
}
int main(void)
{int a,b;while(scanf("%d%d",&a,&b),a+b){if(a > b){a ^= b;b ^= a;a ^= b;}printf("%d\n",fun(b) - fun(a-1));}return 0;
}

  相关解决方案