给定一个十进制n,从1开始,到n的所有整数,求出现1的个数
2016-08-15 22:19
447 查看
使用数学归纳法,代码如下:
/统计出现1的个数,使用数学归纳法,得出的规律如下: //分别计算每一位可能出现的1的次数,然后把每一位的次数相加 //思想:1、若当前位为0,则出现的次数仅由其更高位的数字决定,值为:更高位数字*当前位所在的位数 //2、若当前位为1,则出现的次数有更高位和其低位决定,值为:更高位数字*当前位所在的位数+更低位数字+1; //3、若当前位>1,则出现的次数由更高位决定,值为:(更高位数字+1)*当前位所在的位数 long long Sum1(long long number) { long long count = 0; long long factor = 1;//除数因子,用于截取出当前位,更低位,更高位,直到number被分解为0 long long higher_num = 0; long long lower_num = 0; long long curr_num = 0; while(number / factor != 0) { lower_num = number - (number/factor)*factor; curr_num = (number/factor)%10; higher_num = number/(factor*10); switch(curr_num) { case 0: count += higher_num * factor; break; case 1: count += higher_num * factor + lower_num +1; break; default: count += (higher_num + 1)*factor; break; } factor *= 10; } return count; }
相关文章推荐
- 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
- <编程之美>给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有1的个数
- 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数
- 写正确函数需要注意的地方:给定一个十进制整数N,计算从1开始到N的所有整数出现的“1”的个数
- 课堂练习:给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
- 给定一个十进制正整数N,求出从1开始,到N的所有整数,数字1出现的次数(java实现)
- 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数
- 给定一个十进制的整数,写下从1开始到N的所有整数,计算其中出现的所有"1"的个数
- 给定一个十进制的正整数N,计算从1开始到N的的所有整数中1出现的个数
- 给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数
- 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中1的个数(编程之美P128)
- 给定一个整数数组,1≤a [i]≤n(n =数组的大小),一些元素出现两次,其他出现一次 查找在该数组中出现两次的所有元素
- 给定一个任意的10进制数N,从1开始到N,计算所有数中1出现的次数
- 给定一个正整数N,从1到N所有整数,计算出现1的个数
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 基于Visual C++2013拆解世界五百强面试题--题2-输出和为一个给定整数的所有组合
- 基于Visual C++2013拆解世界五百强面试题--题2-输出和为一个给定整数的所有组合
- 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
- 给定一个整数N 按照顺序给出所有位数为N的整数
- 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数