從1到n整數(shù)中1出現(xiàn)的次數(shù)

從1到n整數(shù)中1出現(xiàn)的次數(shù)

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供崖州網(wǎng)站建設(shè)、崖州做網(wǎng)站、崖州網(wǎng)站設(shè)計(jì)、崖州網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、崖州企業(yè)網(wǎng)站模板建站服務(wù),10余年崖州做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

要計(jì)算X出現(xiàn)的次數(shù)(從1到n整數(shù)中1出現(xiàn)的次數(shù)),需統(tǒng)計(jì)X在每一位出現(xiàn)的次數(shù)。

1到10出現(xiàn)1次X;1到100出現(xiàn)10次X;1到1000出現(xiàn)100次X。

綜上可以得出:從 1 至 10i,在它們的左數(shù)第二位(右數(shù)第 i 位)中,任意的 X 都出現(xiàn)了 10i1 次。

Eg:以n=21345,X=1

依次分析X在各位中出現(xiàn)的次數(shù):

個(gè)位:因?yàn)?1340中有2134個(gè)10,所以從1到21340,1出現(xiàn)了2134次;再看從21341到21345,因?yàn)?<5(這里X為1,肯定滿足,當(dāng)X為任意數(shù)時(shí),應(yīng)判斷X<5是否成立),所以1在個(gè)位中出現(xiàn)的次數(shù)為2135次。

十位:因?yàn)?1300中有213個(gè)100,所以從1到21300,1出現(xiàn)在十位的次數(shù)為213*10次,再看從21301到21345,因?yàn)?>1,所以十位出現(xiàn)的次數(shù)為(213+1)*10^(2-1)=2140.

同理,百位出現(xiàn)的次數(shù)為(21+1)*10^(3-1)=2200.

千位:因?yàn)?0000中共有2個(gè)10000,所以從1到20000,1出現(xiàn)在千位的次數(shù)為2*1000次,再看從20001到21345,因?yàn)?==1,所以千位中肯定含有1,但不會(huì)是1000次,而是345+1=346次(因?yàn)橛?1000,所以要加1),所以1出現(xiàn)在千位的總次數(shù)為2*10^(4-1)+(345+1)=2346次。

萬位:方法同上,出現(xiàn)的次數(shù)為(0+1)*10^(5-1)=10000.

所以:21345中1出現(xiàn)的次數(shù)為2135+2140+2200+2346+10000=18821次

X在第i位出現(xiàn)的次數(shù)的計(jì)算方法:

1、取第i位左邊(高位)的數(shù)字,乘以10^(i-1),得到基本的sum

2、取第i位數(shù)字:

1)如果大于X,則結(jié)果sum+=10^(i-1).

2)如果等于X,則結(jié)果為

sum+=(第i位右邊的(低位)的數(shù)字)+1

3)如果小于X,則結(jié)果就為sum

代碼如下:

size_t NumberOf1Between1AndN_Solution(size_t n)
{
	char str[12] = { 0 };
	int length = strlen(_itoa(n, str, 10));//計(jì)算n的位數(shù)
	size_t countSum = 0;
	//為取第i位數(shù)字簡(jiǎn)便,所以以下采取str運(yùn)算
	for (int i = length - 1; i >= 0; --i)
	{
		//取第i位左面的數(shù)字
		int tmpLeft = 0;
		for (int j = 0; j < i; ++j)
		{
			tmpLeft = tmpLeft * 10 + str[j] - '0';
		}

		countSum += tmpLeft * pow(10, length - i - 1);
		int iVal = str[i] - '0'; //第i位的數(shù)字
		//如果大于X,則結(jié)果countSum+=pow(10, i).
		if (iVal > 1)
		{
			countSum += pow(10, length - i - 1);
		}
		//如果等于X,則結(jié)果為countSum+=(第i位右邊的(低位)的數(shù)字)+1
		else if (iVal == 1)
		{
			int tmpRight = 0;//計(jì)算低位數(shù)字
			for (int j = i + 1; j < length; j++)
			{
				tmpRight = tmpRight * 10 + str[j] - '0';
			}
			countSum += tmpRight + 1;
		}
		//如果小于X,則結(jié)果就為countSum
	}
	return countSum;
}

分享題目:從1到n整數(shù)中1出現(xiàn)的次數(shù)
分享網(wǎng)址:http://muchs.cn/article26/ijoscg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、電子商務(wù)、網(wǎng)站導(dǎo)航、企業(yè)網(wǎng)站制作、網(wǎng)站內(nèi)鏈、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)