AtCoder Beginner Contest 246 B - Get Closer
問題の要約
二次元平面上の点(0,0)から点(A,B)に向かって距離1だけ移動する。
移動後の座標を求めよ。
なお、制約より点(0,0)と点(A,B)の距離は1以上であることが保証される。
制約
入力は全て整数
0<=A,B<=1000
(A,B)≠(0,0)
入力
A B
出力
移動後の点を(x,y)とするとき、xとyをこの順に空白区切りで出力せよ。
想定解との絶対誤差または相対誤差が10^-6以下であれば正解として扱われる。
考え方
1,(A,B)方向に距離1移動した後の点を(A',B')とする。
1 = sqrt(A'^2+B'^2)である。
2,(A,B)に移動したときの距離をdとする。
d = sqrt(A^2+B^2)である。
3,比で考える。
A:B:d = A':B':1より
A:d = A':1
B:d = B':1
これより
A' = A/d
B' = B/d
実際のプログラム
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main(){
double A,B;
cin >> A >> B;
double A_ = A / sqrt(A*A+B*B);
double B_ = B / sqrt(A*A+B*B);
cout << setprecision(15) << A_ << " " << B_ << endl;
return 0;
}