给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。

示例:

输入: 13
输出: 6 
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。

来源:力扣(LeetCode)
AC的C

int countDigitOne(int n) {
    int num=n,s=0;
    long i=1;
    while(num){              //分别计算个、十、百......千位上1出现的次数,再求和。
        if(num%10==0)
            s=s+(num/10)*i;
        if(num%10==1) 
            s=s+(num/10)*i+(n%i)+1;
        if(num%10>1) 
            s=s+ceil(num/10.0)*i;//ceil()返回大于或者等于指定表达式的最小整数
        num=num/10;
        i=i*10;
    }    
return s;
}

java

import java.util.Scanner;

public class Shuziyi {

	public static void main(String[] args) {
		@SuppressWarnings("resource")
		Scanner in = new Scanner(System.in);
		int n=in.nextInt();
		int count = 0;
		long l=0,cur=0,h=0,num=1;
		while(n/num !=0){
	        l=n%num;
	        cur=(n/num)%10;
	        h=n/(num*10);
	        if(cur<2){
	            count += h*num;
	            if(cur==1){
	                count += l+1;
	            }
	        }else{
	            count += (h+1)*num;
	        }
	        num=num*10;
	    }
	    System.out.println(count);
	}
}

python

class Solution:
    def countDigitOne(self, n):
        cnt, i = 0, 1
        while i <= n: # i 依次个十百位的算,直到大于 n 为止。
            cnt += n // (i * 10) * i + min(max(n % (i * 10) - i + 1, 0), i)
            i *= 10
        return cnt

核桃的数量

小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:

1. 各组的核桃数量必须相同
2. 各组内必须能平分核桃(当然是不能打碎的)
3. 尽量提供满足1,2条件的最小数量(节约闹***嘛)

程序从标准输入读入:
a b c
a,b,c都是正整数,表示每个组正在加班的人数,用空格分开(a,b,c<30)

程序输出:
一个正整数,表示每袋核桃的数量。

例如:
用户输入:

2 4 5

程序输出:

20

再例如:
用户输入:

3 1 1

程序输出:

3

C

#include<stdio.h>
int main(){
    int a,b,c,i=1;
    scanf("%d %d %d",&a,&b,&c);
    while(i++>0){
   // for(i=0;;i++){
      if(i%a==0 && i%b==0 && i%c==0){
            printf("%d",i);
            break;
        }
    }
    return 0;
}

Java

import java.util.Scanner;
/* * 1.两两找最大公约数 ; * 2.再找出最小公倍数求积*/
public class Hetao {

	public static void main(String[] args) {
		Scanner in =new Scanner(System.in);
		int a = in.nextInt();
		int b = in.nextInt();
		int c = in.nextInt();
		int i=1;
	    while(i++>0){
	      if(i%a==0 && i%b==0 && i%c==0){
	            System.out.print(i);
	            break;
	        }
	    }
	}
}

python

a,b,c=map(int,input().split())
list=[]
if a<30 and b<30 and c<30:
    sum=a*b*c
    for i in range(1,sum+1):
        if i%a==0 and i%b==0 and i%c==0:
            list.append(i)
print(list[0])