資訊學奧賽一本通 1029:計算浮點數相除的餘 | OpenJudge NOI 1.3 11

君義_noip發表於2020-12-28

【題目連結】

ybt 1029:計算浮點數相除的餘
OpenJudge NOI 1.3 11:計算浮點數相除的餘數

【題目考點】

1. 輸出浮點型量,小數尾部沒有多餘的0

假設有double x = 1.300;
cout<<x;//輸出1.3
printf("%g", x);//輸出1.3

2. 浮點型量向下取整方法

  • 強制轉換為整型 int(x)
  • 呼叫floor()函式(注意:floor()返回double型別)

【解體思路】

這裡餘數(r)的定義是:a = k * b + r,其中k是整數,a > 0, b > 0, 0 <= r < b。
可以理解為,a中至多包含k個b。所以有k為a / b的值向下取整。
將該等式變換為:r = a - k * b,即可求出餘數r

【題解程式碼】

解法1:使用cin,cout進行輸入輸出

使用強制型別轉換

#include <bits/stdc++.h>
using namespace std;
int main()
{
	double a, b;
	cin>>a>>b;
	cout<<a - int(a/b) * b;//或a - floor(a/b) * b
	return 0;
}

解法2:使用scanf,printf進行輸入輸出

#include <bits/stdc++.h>
using namespace std;
int main()
{
	double a, b;
	scanf("%lf %lf", &a, &b);
	printf("%g", a - int(a/b) * b);//或a - floor(a/b) * b
	return 0;
}

相關文章