/*
[整数中1出现的次数(从1到n的整数中1出现的次数)]
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?
为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。
ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution{
public:
int NumberOf1Between1AndN_Solution(int n){
int icout = 0;
int ihight = 0;
int ilow = 0;
int icur = 0;
int ifactor = 1;
while( n / ifactor != 0){
ihight = n / (ifactor*10);
icur = (n / ifactor) % 10;
ilow = n - (n / ifactor) * ifactor;
switch(icur){
case 0 :
icout += ihight*ifactor;
break;
case 1 :
icout += ihight*ifactor + ilow + 1;
break;
default:
// icur > 1
icout += (ihight+1)*ifactor;
}
ifactor *= 10; // scan from the low-order to high-order
}
return icout;
}
};
int main()
{
return 0;
}
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/15294.html