-
Matematik kuch
Ushbu muammoni hal qilishning eng oson yo'li matematika sinfidan foydalanishdir. Bu ko'p hollarda foydalanadigan yechim.
Matematika sinfida trigonometriya, geometriya va matematikaning boshqa jihatlariga oid usullar mavjud. Unda usullar statik sifatida amalga oshiriladi, shuning uchun ularni sinf ob'ektini yaratmasdan darhol Math sinfi nomi orqali chaqirishingiz mumkin.
Eksponentatsiya nimaga o'xshaydi:
public static int pow(int value, int powValue) { return (int) Math.pow(value, powValue); }
Biz cast (int) turidan foydalanishimiz kerak edi, chunki Math sinfining bu usuli double tipidagi qiymatni qaytaradi (argumentlar ham double, lekin u yerda yashirin turdagi cast ishlatiladi).
Va endi - bonus: qo'shimcha imkoniyatlar.
-
Raqam kvadratining qiymati
Keling, eng oddiy narsadan boshlaylik.
Kvadratlash usuli quyidagicha yoziladi:
public static int pow(int value){ return value*value; }
Asosiy qo'ng'iroq:
public static void main(String[] args) { System.out.println(Solution.pow(7)); }
Hammasi shu - hech qanday murakkab yoki keraksiz narsa yo'q.
-
Quvvat uchun raqam
Ammo kvadrat raqam bizga kerak bo'lgan yagona narsa emas. Ko'pincha bizning ishimizda bizga ma'lum darajada raqam kerak bo'ladi, shuning uchun quyidagi biroz murakkabroq versiya, lekin maxsus java pow qiymati bilan:
public static void main(String[] args) { System.out.println(Solution.pow(7, 4)); } public static int pow(int value, int powValue) { int result = 1; for (int i = 1; i <= powValue; i++) { result = result * value; } return result; }
Algoritm juda oddiy: biz natijani boshlang'ich nuqtasini o'rnatamiz, so'ngra uni powValue bilan tsikl qancha marta bajarilgan bo'lsa, uni qiymatimizga ko'paytiramiz (powValue necha marta)
-
Rekursiya
Keyingi usul biroz ekzotik bo'ladi, lekin undan kam emas.
Rekursiya - bu usulning o'zini chaqirishiga imkon beruvchi xususiyat. Java-da bunday mexanizm mavjud va shunga ko'ra bunday usullar rekursiv deb ataladi.
Hammasi bo'lmasa ham ko'p algoritmik masalalarni rekursiv yechish mumkin. Bu ham bundan mustasno emas, shuning uchun keling, qanday qilib rekursiv usulda raqamni ma'lum bir darajaga ko'tarish mumkinligini ko'rib chiqaylik:
public static int pow(int value, int powValue) { if (powValue == 1) { return value; } else { return value * pow(value, powValue - 1); } }
Ko'rib turganimizdek, bizda ikkita holat mavjud:
- Rekursiyadan chiqish sharti yoki boshqacha qilib aytganda, bizning daraja qiymatimiz bittaga yetganda, biz orqaga tashlanishni boshlaymiz.
- Xuddi shu usulni chaqirish natijasida qiymatni ko'paytirish mexanizmining o'zi, lekin powValue bilan - 1.
Xo'sh, endi dangasa usullarni, ya'ni "qutidan tashqarida" usullarni ko'rib chiqish vaqti keldi.
-
BigInteger
BigInteger sinfining asosiy maqsadi ixtiyoriy o'lchamdagi butun sonlarni saqlashdir, lekin shu bilan birga u juda katta (yoki unchalik katta bo'lmagan) raqamlar bilan ishlash imkonini beruvchi turli arifmetik usullarga ega.
BigInteger haqida ko'proq ma'lumotni ushbu maqolada o'qishingiz mumkin .
Xo'sh, Java'da BigInteger yordamida eksponentatsiya qanday ko'rinishga ega bo'ladi?
public static int pow(int value, int powValue) { BigInteger a = new BigInteger(String.valueOf(value)); return a.pow(powValue).intValue(); }
Juda oddiy va hech qanday muammosiz, shunday emasmi?
Эллеонора Керри
Daraja
Java-da qanday qilib eksponentatsiya qilish mumkin
Salom Dunyo! Forumda biror narsa qidirish yoki yordam so'rash hatto tajribali dasturchi uchun ham odatiy holdir. Ammo rivojlanishda juda oddiy va sodda mavzular mavjudki, hatto yashil boshlang'ich ham ularni bilishi kerak. Va bu mavzulardan biri. Bugun biz Java-da eksponentatsiya qanday amalga oshirilishi haqida gaplashamiz. Tasavvur qilaylik, sizga vazifa berilgan: ma'lum darajada raqamni toping. Juda oddiy tuyuladi, ammo yechimni qanday amalga oshirish kerak? Keling, eng keng tarqalgan usulni va bir nechta alternativlarni ko'rib chiqaylik. Va yechimlarga "sho'ng'ishdan" oldin, keling, birinchi navbatda, raqamni kuchga ko'tarish nima ekanligini eslaylik: Kuchga ko'tarish - bu bitta raqamning o'zi bir necha marta ko'paytiriladigan harakatdir. Ko'paytiriladigan songa asos, necha marta ko'paytirilsa, ko'rsatkich deyiladi. Xo'sh, asosning o'z-o'zidan ko'payishi natijasi eksponentsiya deb ataladi. Masalan, 8 uchun u uchinchi darajaga 2 ga teng, chunki 2x2x2=8. Raqamni ikkinchi darajaga ko'tarish biz uni ikki marta koeffitsientga aylantirayotganimizni ko'rsatadi va qoida tariqasida bu daraja kvadrat daraja deb ataladi. Ya'ni, 4 kvadrat = 4x4 = 16. Shunday qilib, biz xotiramizni yangiladik va endi biz to'g'ridan-to'g'ri Java-da pow-dan foydalanish usullariga o'tamiz - ko'rsatkichni oshirish usuli.
GO TO FULL VERSION