问题陈述:
http://acm.hrbeu.edu.cn/index.php?act=problem&id=1001&cid=17
给你两个数a和b,你的任务是计算出1在a和b之间出现的次数,比如说,如果a=1024,b=1032,那么a和b之间的数就是:
1024 1025 1026 1027 1028 1029 1030 1031 1032
则有10个1出现在这些数中。
简单的实现思路:
#include <stdio.h>#include <stdlib.h>
int CountDigists(int n){ int count = 0; while(n > 0) { if(n % 10 == 1) { count++; } n = n / 10; }
return count;}
int CountRangeDigists(int a, int b){ int ret = 0; int i = 0; for(i = a; i <= b; ++i) { ret += CountDigists(i); }
return ret;}
int main(){ int a[500], b[500];
int i = 0; // get the intput while((scanf("%d %d", &a[i], &b[i]) == 2) && (a[i] !=0 ) && (b[i] != 0)) { ++i; }
// ooutput the result int j = 0; for( ; j <= (i - 1); ++j) { printf("%d/n", CountRangeDigists(a[j], b[j])); }
return 0;}
上面仅仅是最简单的实现方法,更为直接的方式是通过计算得到计算公式,个人认为比较麻烦。再次略去。