题目:输入一个整数,求从1到n这n个数的十进制中1出现的次数。
代码示例:
#include<iostream>
using namespace std;
int NumOfOne(int n)
{
if (n <= 0)
return 0;
int n_copy = n;
int NumOfBit = 0;
while (n_copy)
{
NumOfBit++;
n_copy /= 10;
}
//
int Base = 1;
int bitnum = 1;
int numofone = 0;
while (bitnum<=NumOfBit)
{
if (bitnum == 1)
{
int former = n % 10;
int Round = n / 10;
numofone += former ? 1 : 0;
numofone += Round*Base;
Base *= 10;
bitnum++;
}
else
{
int former = n%Base;
int Round = n / (Base * 10);
int weight = n % (Base * 10) / Base;
if (weight > 1)
{
numofone += Round*Base + Base;
}
else if (weight == 1)
{
numofone += Round*Base + former + 1;
}
else
{
numofone += Round*Base;
}
Base *= 10;
bitnum++;
}
}
return numofone;
}
int main()
{
int n;
cout << "输入一个正数:";
cin >> n;
cout << 1 << "-" << n << "中1的个数总和为:" << NumOfOne(n) << endl;
}