PAT-1049 Counting Ones

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/eric4784510/article/details/81988688

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”的个数,找规律吧,我是分别统计每一位上“1”出现的次数,加起来就好了。

#include<stdio.h>
#include<sstream>
#include<string>
using namespace std;

int string2int(string s){
	if(s.length()==0)
		return 0;
	int i;
	stringstream stream(s);
	stream >> i;
	return i;
}

int main(){
	char n[15];
	scanf("%s",n);
	int count=0;
	string st(n);
	for(int i=0;i<st.size();i++){
		int k=i+1;
		int bit=st[st.size()-k]-'0';
		int pre=string2int(st.substr(0,st.size()-k));
		int post=string2int(st.substr(st.size()-k+1));

		if(bit==0){
			int j=k-1;int tmp=pre;
			while(j--)
				tmp*=10;
			count+=tmp;
		}else if(bit==1){
			count+=post+1;
			int j=k-1;int tmp=pre;
			while(j--)
				tmp*=10;
			count+=tmp;
		}else if(bit>1){
			int j=k-1;int tmp=pre+1;
			while(j--)
				tmp*=10;
			count+=tmp;
		}
	}
	printf("%d",count);

	return 0;
}

猜你喜欢

转载自blog.csdn.net/eric4784510/article/details/81988688