模板 计算1的个数

【模板】计算1的个数

 1 __int64 CountOne(__int64 n)
 2 {
 3     __int64 count =0;
 4     if (n ==0)
 5         count =0;
 6     else if (n >1&& n <10)
 7     count =1;
 8     else
 9     {
10         __int64 highest = n;
11         __int64 bit =0;
12         while (highest >=10)
13         {
14             highest = highest /10;
15             bit++;
16         }
17
18         __int64 weight = (__int64)pow(10, bit);
19         if (highest ==1)
20         {
21             count = CountOne(weight -1)+ CountOne(n - weight)+ n - weight +1;
22         }
23         else
24         {
25             count = highest * CountOne(weight -1)+ CountOne(n - highest * weight) + weight;
26         }
27     }
28     return count;
29 }
30 或
31 publiclong CountOne2(long n)
32 {
33     long count =0;
34     long i =1;
35     long current =0,after =0,before =0;
36     while((n / i) !=0)
37     {
38         current = (n / i) %10;
39         before = n / (i *10);
40         after = n - (n / i) * i;
41         if (current >1)
42             count = count + (before +1) * i;
43         else if (current ==0)
44         count = count + before * i;
45         else if(current ==1)
46         count = count + before * i + after +1;
47
48         i = i *10;
49     }
50     return count;
51 }
时间: 2024-10-13 17:35:58

模板 计算1的个数的相关文章

hdu 1086(计算几何入门题——计算线段交点个数)

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1086 You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7167    Accepted Submission(s): 3480 Problem Description Ma

C/C++ 使用宏在编译期计算可变参数个数

参考https://groups.google.com/forum/#!forum/comp.std.c/d-6Mj5Lko_s 同时参考了cppformat源代码 C++是不提倡可变参数,理由不说了.但是类似printf的函数族使用起来确实很方便,我在查找printf的替代方案时无意间看到的.感慨下,微软的CString::Format确实很好用 cppformat提供类似printf的功能,但是又是类型安全的,其核心是利用C++强大的模版功能.在实现上,cppformat实现了在编译期计算可

(原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 计算table元素个数:table.nums

这里的函数主要用来做:计算table元素个数.参考资料为quick_cocos. 星月倾心贡献~~~ 我们先看一段代码 local tbl = { [1] = 2, [2] = 2, [3] = 3 } print( "tbl length is " .. #tbl ) 这段代码是获得tbl的长度,即元素个数. 输出: tbl length is 3 拥有三个元素,没有问题.我们注意到元素的下标是,即key值是:1, 2, 3.即tbl[1], tbl[2], tbl[3].如果,我们

hadoop输入分片计算(Map Task个数的确定)

作业从JobClient端的submitJobInternal()方法提交作业的同时,调用InputFormat接口的getSplits()方法来创建split.默认是使用InputFormat的子类FileInputFormat来计算分片,而split的默认实现为FileSplit(其父接口为InputSplit).这里要注意,split只是逻辑上的概念,并不对文件做实际的切分.一个split记录了一个Map Task要处理的文件区间,所以分片要记录其对应的文件偏移量以及长度等.每个split

字符拆分存入Map计算单词的个数

///计算从命令行输入单词的种类与个数//Map<key,Value>Key-->单词:Value-->数量

计算“1”的个数

1.设计思想 对于一个整数来说,每一位如十位.百位.千位等出现1的次数根据该位数上的数值及其低位或高位影响.当该位数上的数为0时,出现1的次数可能由高位决定,等于高位数字与当前位数相乘:当该位数上的数为1时,出现1的次数受高位和低位影响,及等于高位数字与当前位数相乘并加上低位数字再加1:当该位数上的数大于1时,出现1的次数只由高位决定,及等于高位数字加1后乘上当前位数.通过循环控制每一次的判断,当前位数不断增加. 2.源程序 #include <iostream> using namespac

LeetCode Number of 1 Bits 计算1的个数

题意:提供一个无符号32位整型uint32_t变量,返回其二进制形式的1的个数. 思路:取出一位,就右移1位,挤掉它,循环32次,逐个判断.没难度就不解释了,可能有更好解法,等待第2次思考. 1 class Solution { 2 public: 3 int hammingWeight(uint32_t n) { 4 if(!n) return 0; 5 if(n==1) return 1; 6 7 uint32_t MASK = 1, temp=n; 8 int i, cnt = 0; 9

算法导论:计算“1”的个数

问题如下:给定一个正整数n,统计从1到n的所有整数中出现“1”的个数,如当n=12时,1,2,3,4,5,6,7,8,9,10,11,12中,共有5个“1”: 下面给出我的暴力求解方法: 1 package org.warnier.zhang.demo; 2 3 public class OneCalculator { 4 5 public int calculate(int n) { 6 int count = 0; 7 for(int i = 1; i <= n; i++){ 8 int z

模板:判断一个数是否是素数

素数是除了1和它本身这两个数之外再没有可以整除的除数,为减少时间复杂度,可以只对2~√x 之间的数除x就可以判断是否为素数. 代码 1 bool prime(int x) { 2 for (int i = 2; i <= sqrt(x); i++) { 3 if (x % i == 0) 4 return false; 5 } 6 return true; 7 } 原文地址:https://www.cnblogs.com/moujun1001/p/9476392.html