1049 Counting Ones (30)

本文参考自: 原文地址

The task is simple: given any positive integer N, you are supposed to count the total number of 1's in the decimal form of the integers from 1 to N. For example, given N being 12, there are five 1's in 1, 10, 11, and 12.

Input Specification:

Each input file contains one test case which gives the positive N (<=2^30^).

Output Specification:

For each test case, print the number of 1's in one line.

Sample Input:

12

Sample Output:

5
思路:

给出一个数字n,求1~n的所有数字里面出现1的个数

设当前处理至第k位,记left为第k位的高位所表示的数,now为第k位的数,right为第k位的低位所表示的数。

  1. 若now==0,则ans+=left*a;
  2. 若now==1,则ans+=left*a+right+1
  3. 若now>=2,则ans+=(left+1)*a

C++:

#include<cstdio>
int main(){
	int n,a=1,ans=0;
	int left,now,right;
	scanf("%d",&n);
	while(n/a!=0){
		left=n/(a*10);
		now=n/a%10;
		right=n%a;
		if(now==0)ans+=left*a;
		else if(now==1)ans+=left*a+right+1;
		else ans+=(left+1)*a;
		a*=10;
	}
	printf("%d\n",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/caiyun987/article/details/81664337