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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Code Pratice】—— 乘积尾零、分数、第几个幸运数字

發(fā)布時(shí)間:2024/1/1 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Code Pratice】—— 乘积尾零、分数、第几个幸运数字 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 1 | 乘積尾零
    • 題目
    • 思路
    • 邏輯代碼
  • 2 | 分?jǐn)?shù)
    • 題目
    • 思路
    • 邏輯代碼
  • 3 | 第幾個(gè)幸運(yùn)數(shù)
    • 題目
    • 思路
    • 邏輯代碼

1 | 乘積尾零

題目

如下的10行數(shù)據(jù),每行有10個(gè)整數(shù),請你求出它們的乘積的末尾有多少個(gè)零?

5650 4542 3554 473 946 4114 3871 9073 90 4329 2758 7949 6113 5659 5245 7432 3051 4434 6704 3594 9937 1173 6866 3397 4759 7557 3070 2287 1453 9899 1486 5722 3135 1170 4014 5510 5120 729 2880 9019 2049 698 4582 4346 4427 646 9742 7340 1230 7683 5693 7015 6887 7381 4172 4341 2909 2027 7355 5649 6701 6645 1671 5978 2704 9926 295 3125 3878 6785 2066 4247 4800 1578 6652 4616 1113 6205 3264 2915 3966 5291 2904 1285 2193 1428 2265 8730 9436 7074 689 5510 8243 6114 337 4096 8199 7313 3685 211

思路

剛看到題目,首先想到的就是把乘積進(jìn)行求余10操作,有幾次求余10為0,那就有幾個(gè)尾零,這個(gè)想法很暴力,初想貌似可行,但是有個(gè)問題,這些數(shù)字的乘積一定會(huì)爆掉數(shù)據(jù)的最大范圍,那么這樣的思路就存在很大問題了
換個(gè)想法,末尾有0,說明這個(gè)乘積肯定是10的倍數(shù),而10的由來有兩種

  • 2 * 5 = 10
  • 1 * 10 = 10
    那么可以判斷兩個(gè)數(shù)相乘的數(shù)中是否可以組成上面兩種方式
    具體思路如下:
  • 遍歷每一個(gè)數(shù)字,并統(tǒng)計(jì)其中因子2和因子5的個(gè)數(shù),因?yàn)槊恳唤M 2 * 5 就能組成一個(gè)0
  • 因?yàn)?2 * 5 這個(gè)式子共需要兩個(gè)因子,缺少其中一個(gè)都無法得到一個(gè)0,所以最終0的個(gè)數(shù)就是能組成完成 2 * 5 式子的個(gè)數(shù),也就是因子2和因子5中個(gè)數(shù)最少的那個(gè)。
  • 例子
    比如 15 * 48 * 20 = 14400,其中

    • 15 = 3 * 5
    • 48 = 2 * 2 * 2 * 2 * 3
    • 20 = 2 * 2 * 5
      三個(gè)數(shù)字共有 因子2 6個(gè), 因子5 2個(gè),而這些因子最終只能組成兩組完整的 2 * 5,所以答案就是 因子5的個(gè)數(shù)

    邏輯代碼

    int ProTailZero(int i_uNum) {int res = -1;if (1 > i_uNum){return res;}int inNum = 0;int num5 = 0;int num2 = 0;for (int i = 0; i < i_uNum; i++){cout << "Please input num [" << i << "]: ";cin >> inNum;while (0 == inNum % 5){num5++;inNum /= 5;}while (0 == inNum % 2){num2++;inNum /= 2;}}res = num5;if (num2 < num5){res = num2;}return res; }

    2 | 分?jǐn)?shù)

    題目

    1/1+1/2+1/4+1/8+1/161/1 + 1/2 + 1/4 + 1/8 + 1/161/1+1/2+1/4+1/8+1/16 ……, 每一項(xiàng)都是前一項(xiàng)的一般,如果一共有20項(xiàng),求這個(gè)和是多少,結(jié)果用分?jǐn)?shù)表示出來,類似 3/23/23/2,分母要求互質(zhì)(即最簡式)

    思路

    這是很典型的數(shù)學(xué)題 —— 等比數(shù)列求和,有題目可知

    • 公比 q=12q = \frac{1}{2}q=21?
    • 首項(xiàng) a1a_1a1? = 1

    套入求和公式
    Sn=na1(q=1)S_n = na_1 (q = 1)Sn?=na1?(q=1)
    Sn=a1(1?qn)1?q(q≠1)S_n = \frac{a_1 (1 - q^n)}{1-q} (q\neq1)Sn?=1?qa1?(1?qn)?(q=1)

    而本題要求結(jié)果為最簡式,把首項(xiàng)和公比套入公式的得到最終式子 sn=2?(12)n?1s_n = 2 - (\frac{1}{2})^{n-1}sn?=2?(21?)n?1

    邏輯代碼

    int Pow(int i_uDigits, int i_uNum) {if (1 == i_uDigits){return 1;}else if (i_uNum > 0){return i_uDigits * Pow(i_uDigits, i_uNum - 1);}else{return 1;} }int Fraction(int i_uNum) {int res = -1;if (1 > i_uNum){return res;}res = 1;int Molecular = 1;int Denominator = 1;Denominator = Pow(2, i_uNum - 1);cout << "Denominator = " << Denominator << endl;Molecular = (2 * Denominator) - 1;cout << "The sum of the first " << i_uNum << " terms of the isometric series is [" << Molecular << "/" << Denominator << "]." << endl;return res; }

    3 | 第幾個(gè)幸運(yùn)數(shù)

    題目

    到x星球旅行的游客都被發(fā)給一個(gè)整數(shù),作為游客編號。
    x星的國王有個(gè)怪癖,他只喜歡數(shù)字3,5和7。
    國王規(guī)定,游客的編號如果只含有因子:3,5,7,就可以獲得一份獎(jiǎng)品。
    我們來看前10個(gè)幸運(yùn)數(shù)字是:3 5 7 9 15 21 25 27 35 45
    因而第11個(gè)幸運(yùn)數(shù)字是:49
    小明領(lǐng)到了一個(gè)幸運(yùn)數(shù)字 59084709587505,他去領(lǐng)獎(jiǎng)的時(shí)候,人家要求他準(zhǔn)確地說出這是第幾個(gè)幸運(yùn)數(shù)字,否則領(lǐng)不到獎(jiǎng)品。

    請你幫小明計(jì)算一下,59084709587505是第幾個(gè)幸運(yùn)數(shù)字。

    思路

    首先確定幸運(yùn)數(shù)的判斷規(guī)則:只含有因子3,5,7,也就是說滿足條件的幸運(yùn)數(shù)有以下幾種

  • 3的N次方數(shù),或者5的N次方數(shù),或者7的N次方數(shù)
  • X個(gè)3 * Y個(gè)5 * Z個(gè)7 的數(shù) X,Y,Z∈(0,∞)X,Y,Z \in(0,\infty)X,Y,Z(0,)
  • 思路如下:

  • 從3開始遍歷,直到59084709587505
  • 判斷當(dāng)前遍歷的數(shù)是否屬于幸運(yùn)數(shù),屬于則計(jì)數(shù)加一
  • 邏輯代碼

    int LuckyNumber(long long i_u32Num) {int res = 0;if (3 > i_u32Num){return res;}res = 1;for (long long i = 3; i < i_u32Num; i++){long long tmp = i;while (!(tmp % 3)){tmp /= 3;}while (!(tmp % 5)){tmp /= 5;}while (!(tmp % 7)){tmp /= 7;}if (1 == tmp){res++;}}return res; }

    總結(jié)

    以上是生活随笔為你收集整理的【Code Pratice】—— 乘积尾零、分数、第几个幸运数字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。