a czego? bo nie mam pomysłu
Potęgowanie C++
- Rejestracja: dni
- Ostatnio: dni
- Postów: 64
sprawdzilem, przykładowo
INPUT
5
3 5
6 3
9 8
2 12
4 9
OUTPUT
3
6
1
6
4
- Rejestracja: dni
- Ostatnio: dni
- Postów: 64
INPUT
1
12 5
OUTPUT
8437799
wiec coś jest nie teges xd
- Rejestracja: dni
- Ostatnio: dni
Sprawdziłem kod od @enedil do 10000 (na więcej mi szkoda prądu).
Nie znalazłem błędów.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 64
problem w tym, ze nie chce kopiowac jego kodu, tylko zrozumiec i zmodyfikowac dobrze swoj
- Rejestracja: dni
- Ostatnio: dni
@crypton: w takim razie możesz użyć jego kodu do debugowania swojego stosując test porównawczy:
bool test(unsigned a, unsigned b) {
int actual = PowMod10(a, b);
int expected = my_pow_mod10(a, b);
if (actual != expected) {
cout << "Error found for a = " << a << ", b = " << b << ", expected: " << expected << ", actual: " << actual << "\n";
return false;
}
return true;
}
int main() {
int totalSuccess = 0;
int totalErrors = 0;
int limit = 10000;
for(int a = 1; a < limit; a++) {
for(int b = 1; b < limit; b++) {
if (test(a, b)) {
totalSuccess++;
} else {
totalErrors++;
}
}
}
cout << "Correct results: " << totalSuccess << endl;
cout << "Errors: " << totalErrors << endl;
return 0;
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Pokaż obecny kod.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 64
#include <iostream>
#include<cmath>
using namespace std;
int LiczenieOstCyfryPotegi(int a, int b)
{
int wynik;
if (b == 0)
return 1;
else if (a == 1)
return 1;
else if (a == 2)
{
if (b % 4 == 1)
return 2;
else if (b % 4 == 2)
return 4;
else if (b % 4 == 3)
return 8;
else if (b % 4 == 0)
return 6;
}
else if (a == 3)
{
if (b % 4 == 1)
return 3;
else if (b % 4 == 2)
return 9;
else if (b % 4 == 3)
return 7;
else if (b % 4 == 0)
return 1;
}
else if (a == 4)
{
if (b % 2 == 0)
return 6;
else return 4;
}
else if (a == 5)
{
return 5;
}
else if (a == 6)
{
return 6;
}
else if (a == 7)
{
if (b % 4 == 1)
return 7;
else if (b % 4 == 2)
return 9;
else if (b % 4 == 3)
return 3;
else if (b % 4 == 0)
return 1;
}
else if (a == 8)
{
if (b % 4 == 1)
return 2;
else if (b % 4 == 2)
return 4;
else if (b % 4 == 3)
return 8;
else if (b % 4 == 0)
return 6;
}
else if (a == 9)
{
if (b % 2 == 0)
return 1;
else return 9;
}
}
int main()
{
int ilosc, a, b;
cin >> ilosc;
int* tab = new int[ilosc];
for (int i = 0; i < ilosc; i++)
{
cin >> a >> b;
tab[i]= LiczenieOstCyfryPotegi(a, b);
}
for (int i = 0; i < ilosc; i++) {
cout << tab[i] << endl;
}
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Dobra, to teraz zastanów się co się dzieje jak wpiszesz 12 jako podstawę. W którego ifa wchodzi, a w którego powinien?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 64
nie wchodzi w żadnego ifa, bo nie ma ifa dla a>10
a w ktorego powinien wchodzic? hm, jesli chodzi o istniejące to zapewne dla tego "a==2"
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Ok, to teraz jaka operacja pozwoli Ci z dowolnej liczby zakończonej 2 uzyskać wartość 2?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 64
no zapewne modulo 10
czyli do tych warunkow pododawać jeszcze operatory logiczne "lub" i warunek z modulo 10?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 64
#include <iostream>
#include<cmath>
using namespace std;
int LiczenieOstCyfryPotegi(int a, int b)
{
int wynik;
if (b == 0)
return 1;
else if ((a == 1)||(a%10==1))
return 1;
else if ((a == 2) || (a%10==2))
{
if (b % 4 == 1)
return 2;
else if (b % 4 == 2)
return 4;
else if (b % 4 == 3)
return 8;
else if (b % 4 == 0)
return 6;
}
else if ((a == 3)||(a%10==3))
{
if (b % 4 == 1)
return 3;
else if (b % 4 == 2)
return 9;
else if (b % 4 == 3)
return 7;
else if (b % 4 == 0)
return 1;
}
else if ((a == 4)||(a%10==4))
{
if (b % 2 == 0)
return 6;
else return 4;
}
else if ((a == 5)||(a%10==5))
{
return 5;
}
else if ((a == 6)||(a%10==6))
{
return 6;
}
else if ((a == 7)||(a%10==7))
{
if (b % 4 == 1)
return 7;
else if (b % 4 == 2)
return 9;
else if (b % 4 == 3)
return 3;
else if (b % 4 == 0)
return 1;
}
else if ((a == 8)||(a%10==8))
{
if (b % 4 == 1)
return 2;
else if (b % 4 == 2)
return 4;
else if (b % 4 == 3)
return 8;
else if (b % 4 == 0)
return 6;
}
else if ((a == 9)||(a%10==9))
{
if (b % 2 == 0)
return 1;
else return 9;
}
}
int main()
{
int ilosc, a, b;
cin >> ilosc;
int* tab = new int[ilosc];
for (int i = 0; i < ilosc; i++)
{
cin >> a >> b;
tab[i] = LiczenieOstCyfryPotegi(a, b);
}
for (int i = 0; i < ilosc; i++) {
cout << tab[i] << endl;
}
}
okej, chyba git, bo na SPOJ przeszło :))))
dzięki ślicznie za pomoc i czas na walkę z moją niewiedzą ;>
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Szczecin
Generalnie warunki powinny sprawdzać ostatnią cyfrę, a nie całą liczbę. Więc if (a % 10 == 2) itd
Teraz jest ok, ale warunki nadmiarowe masz - jeśli a == 2 to a % 10 == 2. Wystarczy sprawdzić to ostatnie.