多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 劍指offer 面試題32―從1到n整數中1出現的次數

劍指offer 面試題32―從1到n整數中1出現的次數

來源:程序員人生   發布時間:2015-05-04 09:51:17 閱讀次數:3286次

題目:

輸入1個整數n,求從1到n這n個整數的10進制表示中1出現的次數。

例如輸入12,從1到12這些整數中包括1的數字有1,10,11,12。所以11共出現了5次。


解法1:O(nlogn)

基本思想:

累加1到n每一個整數中1出現的次數。n個數,每一個數有O(logn)位。

#include <iostream> using namespace std; int numberof1(int n) { int ret=0; while(n) { if(n%10==1) ret++; n/=10; } return ret; } int foo(int n) { int count=0; for(int i=1;i<=n;i++) count+=numberof1(i); return count; } int main() { int n; while(cin>>n) { cout<<foo(n)<<endl; } return 0; }


解法2:O(logn)

輸入n有O(logn)位。

基本思想:數字規律

#include <iostream> using namespace std; int foo(int n) { int icount=0; int iflag=1; int ilow=0; int icurr=0; int ihigh=0; while(n/iflag!=0) { ilow=n-(n/iflag)*iflag; icurr=(n/iflag)%10; ihigh=n/(iflag*10); switch(icurr) { case 0: icount+=ihigh*iflag; break; case 1: icount+=ihigh*iflag+ilow+1; break; default: icount+=(ihigh+1)*iflag; break; } iflag*=10; } return icount; } int main() { int n; while(cin>>n) { cout<<foo(n)<<endl; } return 0; }

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: www.亚洲一区二区三区 | 精品一区二区三区五区六区 | 中日韩一区二区三区 | 久久成人精品免费播放 | 自拍偷拍 校园春色 | 国产国语一级a毛片高清视频 | 亚洲在线h | 亚洲天堂中文字幕在线 | 亚洲欧美日韩精品久久久 | 欧美日韩午夜精品不卡综合 | 亚洲免费大全 | 亚洲国产欧洲精品路线久久 | 色人阁久久 | 欧美激情区| 国产成人精品男人免费 | 亚洲第一页在线 | 第一页在线观看 | 中文字幕精品一区二区2021年 | 久久精品a一国产成人免费网站 | 日韩精品一区在线观看 | 国产福利第一视频 | 好吊妞视频在线观看 | 国产日韩视频在线观看 | 久久午夜羞羞影院免费观看 | www.日| 午夜 性色 福利视频 | 国产精品嫩草影院在线播放 | 波多野结衣一区二区三区高清在线 | 啪一啪在线视频 | 国产农村精品一级毛片视频 | 国产精品爱久久久久久久9999 | 免费在线中文字幕 | 亚州春色| 久久精品免费一区二区三区 | 中文字幕一区二区三区精彩视频 | 亚洲图片小说综合 | 亚洲欧美不卡中文字幕 | 亚洲国产欧美日韩一区二区 | 亚洲欧美一区二区三区图片 | 日本不卡视频在线 | 最近的中文字幕视频大全高清 |