//2.1 * 10^9以下の正整数a, bがn回与えられるので、各a, bについて、 //a^b = x.y * 10^z (1 <= x <= 9, 1 <= y <= 9, 1 <= z <= ?、x,y,zは全て整数)となるx, y, zを求め、出力する。 //答えは必ず存在すると仮定してよい。 #include #include #define int long long using namespace std; int n; signed main() { cin >> n; while (n--) { int a, b; cin >> a >> b; //b = log(a)(a^b), z = log(10)(a^b)… //z = blog(10)(a)…、切り捨て誤差分(eps)を余分にたすと安全。 double eps = 1e-10; int z = b * log10((double)a) + eps; //x.yは…、blog(10)(a)の小数部分をpとしたとき、 //10^(p)で概算できる…。 double r = pow(10, b * log10((double)a) + eps - z); int x = r; int y = (r - x)*10; cout << x << " " << y << " " << z << endl; } return 0; }