PAT 甲级 1049 Counting Ones

1049 Counting Ones (30 point(s))

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

经验总结:

这一题....其实就是找规律的题目,如果真从1到N进行递推累加,肯定会超时,毕竟只有400ms,所以,这一题我也是参考的书上的代码,真考试的时候,肯定不会啊....不过理解了,就简单了...代码超级短= =

AC代码 

#include 
int main()
{
	int n;
	scanf("%d",&n);
	int a=1;
	int ans=0;
	while(n/a)
	{
		int left=n/(a*10);
		int now=n/a%10;
		int 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;
}

 

你可能感兴趣的:(PAT甲级,PAT甲级/乙级机试经验)