编程之美 2.4 1的数目

来源:互联网 发布:php http get请求 编辑:程序博客网 时间:2024/04/30 20:05
/* 问题一:求1到N之间出现的"1"的个数 *//* 解法一 遍历求1-N中每一个含有"1"个数 */unsigned long int count_1_interger(unsigned long int n){unsigned long int num = 0;while (n != 0){num += (1 == n % 10) ? 1 : 0;n /= 10;}return num;}unsigned long int f(unsigned long int n){unsigned long int icount = 0;for (i = 1; i < n; i++){icount += count_1_interger(i);}return icount;}/* 解法二 f(N) = 个位数1个数+十位数1个数+百位数1个数....*//* 百位数1个数(12013) = 若百位是0,更高位数(12)乘以当前位数(100);                          *//*                      若百位是1(12113),更高位数(12)乘以当前位数(100) + 低位数字(13)+1*//*                      若百位是其他,(更高位数+1)乘以当前位数                             */int sum1s(int n){int count = 0;int factor = 1;int lownum = 0;int currnum = 0;int highnum = 0;while (n / factor != 0){lownum = n - (n / factor) * factor;currnum = (n / factor) % 10;highnum = n / (factor * 10);switch (currnum){case 0:count += highnum * factor;break;case 1:count += highnum * factor + lownum + 1;break;default:count += (highnum + 1) * factor;break;}factor *= 10;}return count;}


原创粉丝点击