写在前面
- 实现思路
- 数学推理问题
- 根据数位计算1的个数
- 核心问题在于解决思路,细节处理、调试耗费部分时间
测试用例
input:
12
output:
5
input:
1
output:
1
input:
1073741824
output:
1036019223
ac代码
- 代码逻辑
now / loc
数位,从低到高循环遍历
#include<iostream>
using namespace std;
int main()
{
int n, a=1, ans = 0;
int left, loc, right;
scanf("%d", &n);
while(n/a!=0)
{
left = n/(a*10);
loc = n/a%10;
right = n%a;
if(loc == 0) ans += left*a;
else if(loc==1) ans += left *a + right + 1;
else ans += (left + 1)*a;
// cout << "left " << left << " loc " << loc << " right " << right<< " a " << a << " ans " << ans << endl;
a *= 10;
}
printf("%d", ans);
return 0;
}