日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

统计0到n之间1的个数

發布時間:2025/4/16 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 统计0到n之间1的个数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

給定一個十進制整數N,求出從1到N的所有整數中出現”1”的個數。?

例如:N=2時 1,2出現了1個 “1” 。

N=12時 1,2,3,4,5,6,7,8,9,10,11,12。出現了5個“1”。

1、暴力求解法

//暴力求解 long CountOnes(long n) {int i,j;//循環變量int ncount=0;//計數for (i=1; i<=n; i++){j=i;while(j!=0){if (j%10==1){ncount++;}j/=10;}}return ncount; }2、統計方法

統計n每一位的值:

current = (n / i) % 10;before = n / (i * 10);after = n - (n / i) * i;

123

current=2;

before=1;

after=3;

對于某個位置,它可以是大于1,等于1,等于0

如果大于1,則由高位+1決定數目

如果等于1,則由其左右兩邊的數目決定

如果等于0,也是由高位決定


1、current=0時

cout=cout+before*i;

2、current=1

cout=cout+before*i+after*i

3、current>1

cout=cout+(before+1)*i

public long CountOne2(long n) {long count = 0;long i = 1;long current = 0, after = 0, before = 0;while ((n / i) != 0) {current = (n / i) % 10;before = n / (i * 10);after = n - (n / i) * i;if (current > 1)count = count + (before + 1) * i;else if (current == 0)count = count + before * i;else if (current == 1)count = count + before * i + after + 1;i = i * 10;}return count; }


《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的统计0到n之间1的个数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。