从1到n整数中1出现的次数
来源:互联网 发布:怎么用php做菱形 编辑:程序博客网 时间:2024/04/30 11:42
题目描述:
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。具体分析 参照《剑指offer》
代码实现:
#include <iostream>#include <math.h>using namespace std;int NumberOf1(const char* strN){if(!strN || *strN<'0' || *strN>'9' || *strN=='\0')return 0;int first = *strN-'0';//first输入数字的第一位int len = strlen(strN);if(first==0 && first==1)return 0;if(len==1 && first>0)return 1;//假设strN是“21345”//numFirstDigit是数字10000-19999的第一位中的数目int numFirstDigit = 0;if(first==1)numFirstDigit=atoi(strN+1)+1;elsenumFirstDigit=pow(10,len-1);//numOtherDigit是1346-21345除了第一位之外的数位中数目int numOtherDigits=first*(len-1)*pow(10,len-2);cout<<"dangqian :"<<first<<" "<<len<<endl;//numRecursive是1-1345中的数目int numRecursive=NumberOf1(strN+1);cout<<" numFirstDigit :"<<numFirstDigit<<" numOtherDigits: "<<numOtherDigits<<endl;return numFirstDigit+numOtherDigits+numRecursive;}int NumberOf1Between1AndN(int n){if(n <= 0 )return 0;char strN[50];sprintf(strN,"%d", n);return NumberOf1(strN);}void main(){cout<<NumberOf1Between1AndN(21345)<<endl;}
0 0
- 整数中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出现的次数
- 从1到n整数中1出现的次数
- 从1到 n整数中1出现的次数
- 从1到n整数中1出现的次数
- sakai编译
- Head First Design pattern Observer
- securecrt同时向多个tab窗口发送相同的命令
- 跨平台 GUI 的三种实现策略.md
- hibernate 五大对象
- 从1到n整数中1出现的次数
- hibernate中session在service实现事务openSession()和getCurrentSession的区别
- Python格式化日期时间的函数
- Eclipse修改右键点击新建的内容
- (笔记) MATLAB 文本的高级控制,极坐标图
- SQLServer:获取表名,列名等信息
- FrameLayout组件居中显示
- Sublime Text 2 Emmet插件 常用快捷键
- iOS UIView非常用方法及属性详解