小數第n位
阿新 • • 發佈:2019-01-10
分享 一個個 類型 一行 n) con one view int
如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。
本題的任務是:在上面的約定下,求整數除法小數點後的第n位開始的3位數。 輸入格式 一行三個整數:a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置(0<a,b,n<1000000000) 輸出格式 一行3位數字,表示:a除以b,小數後第n位開始的3位數字。 樣例輸入 1 8 1 樣例輸出 125 樣例輸入 1 8 3 樣例輸出 500 樣例輸入 282866 999000 6 樣例輸出 914
小數第n位
問題描述 我們知道,整數做除法時,有時得到有限小數,有時得到無限循環小數。如果我們把有限小數的末尾加上無限多個0,它們就有了統一的形式。
本題的任務是:在上面的約定下,求整數除法小數點後的第n位開始的3位數。 輸入格式 一行三個整數:a b n,用空格分開。a是被除數,b是除數,n是所求的小數後位置(0<a,b,n<1000000000) 輸出格式 一行3位數字,表示:a除以b,小數後第n位開始的3位數字。 樣例輸入 1 8 1 樣例輸出 125 樣例輸入 1 8 3 樣例輸出 500 樣例輸入 282866 999000 6 樣例輸出 914
Algorithm
模擬一下除法,但是如果直接一個個相除,時間復雜度會過高,此時應該想辦法加速:每次循環後乘以10的n次方,同時小數快速前進n位!
AC
1 #include<iostream> 2 3 using namespace std; 4 5 int main() 6 { 7 // 一定要用long long類型 8 long long a, b, n; 9 while(cin>>a>>b>>n) 10 { 11 while(n -10 > 0) 12 { 13 a *= 1e10; // 快速逼近 14 a %= b; 15 n -= 10View Code; 16 } 17 for(int i=1;i<n+3;i++){ 18 a *= 10; 19 if(i >= n) 20 cout<<a/b; 21 a %= b; 22 } 23 cout<<endl; 24 } 25 return 0; 26 }
小數第n位