PAT A 1049. Counting Ones (30)

1632 단어 PAT
제목
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 (<=230).
Output Specification:
For each test case, print the number of 1's in one line.
Sample Input:
12

Sample Output:
5

 
1~n의 모든 수 중 1의 수량을 통계하다.
0이 되면 1의 개수는 0이다.9시가 되면 1의 개수는 1이다.99시에 1의 개수는 20...
즉 data[i]에서 i개 9시까지의 1의 개수 data[i]=data[i-1]*10+10^(i-1)
 
숫자 n에 대한 1의 총 개수 추이 관계식은 다음과 같습니다.
1. 최고위 i를 먼저 더하면 뒤에 나타나는 (99...99, i-1개 9)의 횟수를 도입한 1
2. 최상위 수준에서 도입 고려 1
3. 그리고 최고위 삭제, 순환
 
코드:
#include 
#include 
using namespace std;

int main()
{
	int n,num=0;	// ,1 
	cin>>n;
	int data[12];	// i (9,99,999… 1,2,3…) 1 ( 1,20,300…)
	int number[12];	// i ( 1 )
	int i,j,temp=n;

	data[0]=0;	//0 
	number[0]=0;
	for(i=1;i<12;i++)	// data[],number[]
	{
		number[i]=temp%10;
		temp/=10;
		if(temp==0)	// 
			break;
		data[i]=data[i-1]*10+pow(double(10),i-1);
	}
	
	for(;i>0;i--)
	{
		num+=number[i]*data[i-1];	// (i)*0 99…99(i 9) 1 
		if(number[i]>1)	// 1, 10^(i-1)
			num+=(int)pow((double)10,i-1);
		else if(number[i]==1)	// 1, n( )-10^(i-1)+1
			num+=n-(int)pow((double)10,i-1)+1;
		n-=number[i]*(int)pow((double)10,i-1);	// 
	}

	cout<

 
 
 
 

좋은 웹페이지 즐겨찾기