1049 Counting Ones (30分)
题目链接:PAT A 1049
这一道题,实际上是数学规律题,我一开始是没有想出怎么做的,参考了晴神和磊神书中的解法才掌握了这道题的解法,这里直接给出书中的解法,以供参考(网上应该是没有比这个更详细更简洁易懂的解法了):
参考代码:
#include<iostream>
using namespace std;
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;
}