1. 程式人生 > >小數第n位

小數第n位

分享 一個個 類型 一行 n) con one view int

小數第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 -= 10
; 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 }
View Code


小數第n位