从1到n整数中1出现的次数
来源:互联网 发布:centos 安装ftp 编辑:程序博客网 时间:2024/04/30 13:56
求解:从1到n整数中1出现的次数。比如n=12时,1、10、11、12共出现了5个1.
这是剑指offer的一道题,但是在网上看到了一个精妙的解法。
解:
个位出现的次数=n/10 + (个位数>1时:+1) + (个位数==1时:+1)
十位出现的次数=n/100*10 + (十位数>1时:+10) +(十位数==1时:+n%10+1)
百位出现的次数=n/1000*100+ (百位数>1时:+100) +(百位数==1时:+n%100+1)
以此类推......
位数等于1时,相当于加上它的所有低位值+1,比如:
112 它的百位等于1,就是112/1000*100+(12+1);
126它的百位就是126/1000*100+(26+1)
举一个完整的例子:对于数1139来说:
个位=1139/10+1
十位=1139/100*10+10
百位=1139/1000*100+(39+1)
千位=1139/10000*1000+(139+1)
#include<iostream>using namespace std;class Solution {public: int NumberOf1Between1AndN_Solution(int n) { int dig = 10; int N = n, ans = 0; while(N){ ans += n/dig*(dig/10)+(N%10==1?(n%(dig/10)+1):(N%10>1?dig/10:0)); N /= 10; dig *= 10; } return ans; }};int main(){Solution s;int n;while(1){cin>>n;cout<<s.NumberOf1Between1AndN_Solution(n)<<endl;}return 0;}
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出现的次数
- System.out.println(s) 打印值为对象引用时,调用toString()方法。
- Material Design学习之 Search
- 实用文章链接
- Angular入门篇快速开发导航网
- 【权限管理】基于shiro的权限管理开发实现
- 从1到n整数中1出现的次数
- Java:获取指定时间所在的年份的第一天是周几
- 贪心算法
- python中的 字符串与list的互相转换 (join函数的使用)
- 网易游戏第二场 - 题目3 : 神奇的数
- class,指令,表单控件
- PHP中获取当前页面的完整URL
- swift全局变量定义与使用
- hdoj--5025--Saving Tang Monk(bfs三维标记)