【Code Pratice】—— 乘积尾零、分数、第几个幸运数字
文章目錄
- 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ù)中是否可以組成上面兩種方式
具體思路如下:
例子
比如 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ù)有以下幾種
思路如下:
邏輯代碼
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RJ45和RJ11
- 下一篇: VSFTPD移植及使用