整数中1出现的次数(从1到n整数中1出现的次数)
来源:互联网 发布:库里1516赛季每场数据 编辑:程序博客网 时间:2024/06/05 14:57
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
class Solution {public: int NumberOf1Between1AndN_Solution(int n) { if(n<=0) return 0; char strN[50]; sprintf(strN,"%d",n); return NumberOf1(strN); } int NumberOf1(const char* strN) { if(!strN||*strN<'0'||*strN>'9'||*strN=='\0') return 0; int first=*strN-'0'; unsigned int length=static_cast<unsigned int>(strlen(strN)); if(length==1&&first==0) return 0; if(length==1&&first>0) return 1; //假设strN是“21345” //numFirstDigits是数字10000~19999的第一位中的数目 int numFirstDigit=0; if(first>1) numFirstDigit=PowerBase10(length-1); else if(first==1) numFirstDigit=atoi(strN+1)+1; //numOtherDigits是1346~21345除了第一位之外的数位中的数目 int numOtherDigits=first*(length-1)*PowerBase10(length-2); //numRecursive是1~1345的数目 int numRecursive=NumberOf1(strN+1); return numFirstDigit+numOtherDigits+numRecursive; } int PowerBase10(unsigned int n) { int result=1; for(unsigned int i=0;i<n;i++) result*=10; return result; }};
0 0
- 整数中1出现的次数(从1到n整数中1出现的次数)
- 整数中1出现的次数(从1到n中出现的次数)
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到n整数中1出现的次数
- 从1到 n整数中1出现的次数
- Chapter 3-exercise
- 【Java基础提高】分析Java的回调机制(二)
- k-近邻算法
- 连续子数组的最大和
- hdoj 5523 Game 【博弈】
- 整数中1出现的次数(从1到n整数中1出现的次数)
- Develop--Training(四)Getting Started--Managing the Activity Lifecycle
- Hadoop 配置文件存放位置
- 实战c++中的string系列--string的替换、查找(一些与路径相关的操作)
- 把数组排成最小的数
- Shell学习--(2)变量
- 几种目前常用的人脸表情库
- android assets中.9.png的使用
- 在云平台上基于Go语言+Google图表API提供二维码生成应用