โจทย์
ได้รับค่า x และ y ทางเราต้อง หาค่าที่มากกว่าระหว่าง x^(y^2) และ y^(x^2)
ตัวอย่าง
Input: x = 4, y = 3
Output: 3^(4^2)
อธิบาย:
- x^(y^2) = 4^(3^2) = 4^9 = 262,144
- y^(x^2) = 3^(4^2) = 3^16 = 43,046,721
แนวทางแก้ปัญหา
การคำนวณค่าจริงอาจล้นได้เมื่อตัวเลขใหญ่ ใช้ ลอการิทึมธรรมชาติ (ln) เพื่อเปรียบเทียบ:
- ln(x^(y^2)) = y^2 * ln(x)
- ln(y^(x^2)) = x^2 * ln(y)
หารทั้งสองข้างด้วย (x^2)*(y^2) จะได้:
- ln(x) / x^2
- ln(y) / y^2
ฟังก์ชัน ln(z)/z^2 เป็นฟังก์ชันลดลงเมื่อ z เพิ่มขึ้น ดังนั้นถ้า x > y แล้ว x^(y^2) < y^(x^2)
โปรแกรมตัวอย่าง
#include <iostream>
using namespace std;
bool checkGreaterVal(int x, int y) {
if (x > y) return false;
else return true;
}
int main() {
int x = 3, y = 5;
cout << "The greater value is ";
if (checkGreaterVal(x, y))
cout << x << "^(" << y << "^2)";
else
cout << y << "^(" << x << "^2)";
return 0;
}
ผลลัพธ์
The greater value is 3^(5^2)