题目描述

分析:找出1~N之间的所有数字中1出现的次数,暴力会超时(但是考试时也会得到部分分)

#include<iostream>
#include<algorithm>
using namespace std;
int ans;
int main()
{
int n;
scanf("%d", &n);
int a = 1, left, right;
while (n / a)
{
int now = n / a % 10;
left = n / (a * 10);
right = n%a;
if (now == 0)ans += left*a;
else if (now == 1)ans += left*a + 1 + right;
else if (now > 1)ans += (left + 1)*a;
a *= 10;
cin.get();
}
printf("%d", ans);
return 0;
}
本文介绍了一种高效算法,用于计算从1到任意整数N之间所有数字中数字1出现的总次数。该算法避免了暴力枚举的方式,通过将数字分解并利用数学规律来减少计算量。
1016

被折叠的 条评论
为什么被折叠?



