信息学奥赛一本通 1082:求小数的某一位 | OpenJudge NOI 小学奥数 7830
【題目鏈接】
ybt 1082:求小數的某一位
OpenJudge NOI 小學奧數 7830:求小數的某一位
【題目考點】
1. 數制:求某小數位
設rrr為a/b的余數,q是整數商,那么根據
a÷b=q??ra \div b = q \cdots\cdots ra÷b=q??r
有ab=q+rb\frac{a}{b} = q + \frac{r}{b}ba?=q+br?
其中q是結果的整數部分,rb\frac{r}{b}br?是結果的小數部分。
假設rb\frac{r}{b}br?值為0.d1d2d3d4...0.d_1d_2d_3d_4...0.d1?d2?d3?d4?...其中did_idi?是每一位的數字。
根據按位權展開公式,有:
rb=d1?10?1+d2?10?2+d3?10?3...\frac{r}{b} = d_1\cdot10^{-1}+d_2\cdot10^{-2}+d_3\cdot10^{-3}...br?=d1??10?1+d2??10?2+d3??10?3...
兩邊乘以10,有:
10rb=d1+d2?10?1+d3?10?2...\frac{10 r}{b} = d_1+d_2\cdot10^{-1}+d_3\cdot10^{-2}...b10r?=d1?+d2??10?1+d3??10?2...
10rb的余數是(10r)%b\frac{10r}{b}的余數是(10r)\%bb10r?的余數是(10r)%b
這個數的整數部分是10r?(10r)%bb=d1\frac{10r - (10r) \% b}{b} = d_1b10r?(10r)%b?=d1?,
小數部分:(10r)%bb=d2?10?1+d3?10?2...\frac{(10r) \% b}{b} = d_2\cdot10^{-1}+d_3\cdot10^{-2}...b(10r)%b?=d2??10?1+d3??10?2...
得到的d1d_1d1?,即為十分位數字。
同樣地,將(10r)%bb\frac{(10r) \% b}{b}b(10r)%b?再乘以十,并分離整數部分,得到的就是百分位數字。
由此,總結出求小數各位數字的方法是:乘十取整。
求第n位小數,就是乘十取整10次后,最后一次取整得到的整數。
2. (擴展)數制:求某位的數字
求任意進制數字整數部分某位的方法是:除基取余
求任意進制數字小數部分某位的方法是:乘基取整
其中“基”是指該數制的基數,如十進制的基數是10,十六進制的基數是16。
2. 模擬:除法豎式
除法豎式本質上就是上述運算。但一般學生對除法豎式更為了解,所以以模擬除法豎式的角度來解題也可以。
- 設被除數為r,使r = a%b,作為最初的被除數,除數還是b。
- 被除數r比除數b小,r乘以10,然后求r/b,得到的商寫在商的位置,即為十分位的值,得到的余數作為新的被除數。
- 此時被除數r比除數b小,r乘以10,然后求r/b,得到的商即為百分位的值,得到的余數作為新的被除數。
- 不斷循環,第n次循環求出的商即為小數點后第n位。
【解題思路】
1. 以數制中“乘10取整”的思路來做
2. 以模擬除法豎式的角度來做
兩種思路寫出來的代碼實際是一樣的。
【題解代碼】
解法1:數制:乘基取整
#include<bits/stdc++.h> using namespace std; int main() {int a, b, n, d;//d為某一位的數字cin >> a >> b >> n;int r = a % b;//r為分子for(int i = 1; i <= n; ++i){r *= 10;d = (r - r % b) / b;//求r除以b的商,為第i位小數r %= b;//r的新值為(10r)%b}cout << d;//第n次求出的d就是第n位數return 0; }解法2:模擬除法豎式
#include<bits/stdc++.h> using namespace std; int main() {int a, b, n, d;//d為某一位的數字cin >> a >> b >> n;int r = a % b;//初始的被除數for(int i = 1; i <= n; ++i){r *= 10;//被除數乘以10d = r / b;//求出此次相除得到的商,即為第i位的數字r %= b;//余數作為新的被除數}cout << d;return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1082:求小数的某一位 | OpenJudge NOI 小学奥数 7830的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息学奥赛一本通(1261:【例9.5】
- 下一篇: 信息学奥赛一本通(1178:成绩排序)—