Algorithm --> 小于N的正整数含有1的个数

//https://leetcode.com/problems/number-of-digit-one/

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

For example:

Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

class Solution {
public:
    int countDigitOne(int n) {
        int ones = 0;
        for (long long m = 1; m <= n; m *= 10)
            ones += (n/m + 8) / 10 * m + (n/m % 10 == 1) * (n%m + 1);
        return ones;
    }
};
时间: 2024-10-13 23:06:06

Algorithm --> 小于N的正整数含有1的个数的相关文章

java . 请在小于99999的正整数中找符合下列条件的数,它既是完全平方数,又有两位数字相同,如:144,676。

1 import java.util.HashMap; 2 import java.util.Map; 3 import java.util.Map.Entry; 4 //请在小于99999的正整数中找符合下列条件的数,它既是完全平方数, 5 //又有两位数字相同,如:144,676. 6 public class wqs { 7 8 //完全平方数 9 public static boolean iswqs(int n){ 10 int i; 11 double dn=Math.sqrt(n)

课堂练习之求1到N之间的数里面含有1的个数

设计思想: 输入一个数,利用for循环,对每个数进行计算,统计该数是否含有1以及所含1的个数: 然后,对每个数的统计:通过while循环,从个位开始数,当i没有更高位时停止统计,(i/=10) ,最终输出个数. 代码: //求1到N之间的数里面含有1的个数 #include<iostream> using namespace std; int main() { int icount=0,i,N; cout<<"Please input the integer N,N=&q

2015华为机试——求n!中含有0的个数

题目描述: 求n!中含有0的个数,例如1!= 1 含有0个0,5! = 120 含有1个0,10! = 3628800 含有2个0 解题思路: 这题之前在leetcode中做过,如果先对n进行阶乘运算,然后%10求0的个数.但是n!很有可能溢出,所以需要找到它的等效方法,0的个数即为10的个数,即为5于2的个数,显然在n!中,2的个数要大于5的个数,因此只要算出n范围内有多少个5就OK 代码如下: public static int getZeroCount(int n) { /*在这里实现功能

将正整数n划分成一系列正整数之和,求正整数的不同划分个数

//将正整数n划分成一系列正整数之和,求正整数的不同划分个数 //n表示划分的整数,m表示划分的整数最大值 function q(n,m){ if(n<1||m<1){ return 0; }else if(n===1||m===1){ return 1; }else if(n<m){ return q(n,n) }else if(n===m){ return q(n,m-1)+1 }else{ return q(n,m-1)+q(n-m,m) } } //例如:正整数6有11种划分 c

LIGHT OJ 1370 欧拉函数(在小于自身的正整数中有n个与自身互素的数,这样的数最小的为n后第一个素数)

1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<string> 5 #include<algorithm> 6 #include <cmath> 7 using namespace std; 8 typedef long long ll; 9 const ll INF = -100000000000ll; 10 const double ep

统计重1到n的正整数中1的个数

转:http://blog.csdn.net/sjf0115/article/details/8600599 问题: 给定一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数. 例如:N= 2,写下1,2.这样只出现了1个“1”. N= 12,我们会写下1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12.这样,1的个数是5. 问题一: 写一个函数f(N),返回1到N之间出现1的个数,比如f(12)= 5. 解法一: 让我们首先想到的一个方

寻找正整数中1的个数

一.实验题目 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数出其中1的个数. 要求: 1.写一个函数F(N),返回1~N之间出现“1”的个数,例如:F(12)=5; 2.在32位整数范围内,满足条件的“F(N)=n”的最大的N是多少; 二.设计思路 首先分析规律 F(3)=1 F(13)=2+4=6 F(19)=2+10=12 F(23)=3+10 F(33)=4+10 F(93)=10+10=20 F(123)=24+20+13=57 设N = abcde ,其中abcde分别为

自然数从1到n之间,有多少个数字含有1

    问题明确而简单.for循环肯定是不好的.       用递推方法:       定义h(n)=从1到9999.....9999  ( n 个 9)之间含有1的数字的个数.定义f(n)为n位数中含有1的数字的个数.    由定义可知:h(n)=f(1)+f(2)+f(3)+....+f(n); 则f(1)=h(1)=1;   f(2)=10^1+8*h(1).   f(3)=10^2+8*h(2).   f(4)=10^3+8*h(3).   ......   意义如下:f(4)是一个四位

[NewCoder]求int型正整数在内存中存储时1的个数

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数  输入例子:5  输出例子:2 import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int num = 0; S