面试题32—从1到n整数中1出现的次数

来源:互联网 发布:linux vim 查询 编辑:程序博客网 时间:2024/06/03 20:28

题目:输入一个整数,求从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;}