pat 甲级 1049. Counting Ones (30)
2018-03-13 20:32
501 查看
1049. Counting Ones (30)
时间限制100 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue
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 思路: 对于一个数的abcde,先计算其中的某一位上出现1的个数,不妨考虑百位上的c,若c为0,则百位上出现1的个数和c的高位ab有关,具体个数是ab*digit,这里c是在百位上,那么digit为100; 若c=1,则百位上出现1的个数为(ab*digit)+de+1,其中de为abcde中c的低位.9=>c>=2时,百位上出现1的个数为(ab+1)*digit. AC代码:
#define _CRT_SECURE_NO_DEPRECATE #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<string> #include<set> #include<queue> #include<map> using namespace std; #define INF 0x3f3f3f #define N_MAX 200+5 #define M_MAX 100000+20 typedef long long ll; int n ,cnt = 0; int Count(int n) { int cnt = 0,digit=1; while (n / digit != 0) { int higher = n / (digit * 10); int lower = n - (n / digit)*digit;//!! int cur = n / digit % 10; switch (cur){ case 0: cnt += higher*digit; break; case 1: cnt += higher*digit + lower + 1; break; default: cnt += (higher + 1)*digit; break; } digit *= 10; } return cnt; } int main() { while (cin>>n) { cnt = Count(n); cout << cnt << endl; } return 0; }
相关文章推荐
- PAT甲级 1049. Counting Ones (30)
- PAT甲级.1049. Counting Ones (30)
- PAT 甲级 1049. Counting Ones (30)
- 【PAT甲级】1049. Counting Ones (30)
- PAT 1049. Counting Ones (30)
- PAT (Advanced Level) Practise 1049 Counting Ones (30)
- PAT 1049. Counting Ones (30)
- 【PAT】【Advanced Level】1049. Counting Ones (30)
- PAT 1049. Counting Ones (30)(数位dp(记忆化搜索))
- pat甲1049. Counting Ones (30)
- pat 1049. Counting Ones (30)
- 1049. Counting Ones (30)【计算1 的个数】——PAT (Advanced Level) Practise
- PAT 1049. Counting Ones (30)
- PAT_A 1049. Counting Ones (30)
- 【PAT (Advanced Level)】1049. Counting Ones (30)
- 【PAT】1049. Counting Ones (30)
- Python实现Pat 1049. Counting Ones (30)
- PAT (Advanced Level) Practise 1049 Counting Ones (30)
- PAT 解题报告 1049. Counting Ones (30)
- PAT 1049. Counting Ones (30)(计算1到N,这些数字中1出现的个数,before i after,归纳)