分數化小數
阿新 • • 發佈:2018-12-17
題目描述: 輸入正整數a,b,c,輸出a/b的小數形式,精確到小數點後c位,a,b<=10^6,c<=100 以三個0結束輸入。
分析: 開始想用C++的setprecision(x),後來一想,setprecision只能到小數點後16位(double的精確度範圍),因此需要手動模擬除法過程。很簡單,只需要先算出小數點前的數輸出,求得餘數。對於小數點後的數:先對餘數乘以10,除以b並輸出,再用取得的餘數作為除數迭代即可。 由於最後一位的下一位需要四捨五入,因此將迴圈設定為1到n-1,再計算n+1位即可。
程式碼:
#include<iostream> #include<string> #include<cstring> #include<Windows.h> #include<cmath> using namespace std; int main() { int a, b, c, t1, t2; //t1代表整數部分,t2代表小數部分 int cnt = 1; while (scanf("%d%d%d", &a, &b, &c) == 3) { if (a == b && b == c) break; cout << "Case " << cnt++ << ": "; t1 = a / b; t2 = a - t1; cout << t1 << "."; for (int i = 1;i <= c-1;i++) { t2 *= 10; cout << t2 / b; t2 %= b; } t1 = ((t2 * 10 % b) * 10) / b; if (t1 >= 5) cout << t2 * 10 / b + 1; else cout << t2 * 10 / b; cout << endl; } system("pause"); return 0; }