给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
Input
输入N(1 <= N <= 10^9)
Output
输出包含1的个数
Input示例
12
Output示例
5
#include "iostream"
using namespace std;
int main()
{
long long num, temp, sum = 0;
int dig = 0;
cin >> num;
temp = num;
while (temp)
{
dig++;
temp /= 10;
}
if (dig == 1)
{
cout << 1 << endl;
}
else
{
for (int i = 1; i <= dig; i++)
{
long long ten = 1;
int dig_1 = i;
while (dig_1--)
{
ten *= 10;//求出什么位
}
//求出该位上的数字
long long te_num = num / (ten / 10);
te_num %= 10;
if (te_num == 0)
{
long long forword = num / ten;//求出该位之前的数
sum += forword * ten / 10;
}
else if (te_num == 1)
{
long long forword = num / ten;//求出该位之前的数
sum += forword * ten / 10;
long long back_num = num % (ten / 10) + 1;//该位之后的数+1
sum += back_num;
}
else if (te_num > 1)
{
long long forword = num / ten + 1;//求出该位之前的数
sum += forword * ten / 10;
}
}
cout << sum << endl;
}
getchar();
getchar();
return 0;
}
51nod1009 数字1的数量
最新推荐文章于 2023-09-14 11:12:27 发布