Potęgowanie C++

Potęgowanie C++
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

a czego? bo nie mam pomysłu

enedil
Musisz przetestować swój kod, sprawdź czy działa przynajmniej na małych liczbach.
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

sprawdzilem, przykładowo
INPUT
5
3 5
6 3
9 8
2 12
4 9

OUTPUT
3
6
1
6
4

enedil
A sprawdź dla a=12, b=5
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

INPUT
1
12 5
OUTPUT
8437799
wiec coś jest nie teges xd

edytowany 2x, ostatnio: crypton
CR
nie działa dla a (podstawy) większej niż 10 xd
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

jakieś pomysły?

enedil
no ja mam pomysły, dokładnie wiem z czym problem, ale myślę, że jak się chwilę zastanowisz to odkryjesz w czym rzecz
CR
jak napisalem, dziala tylko dla a<10, a jak rozszerzyc dzialanie na a>10, mysle od dobrej chwili i nic
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Sprawdziłem kod od @enedil do 10000 (na więcej mi szkoda prądu).
Nie znalazłem błędów.

CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

problem w tym, ze nie chce kopiowac jego kodu, tylko zrozumiec i zmodyfikowac dobrze swoj

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

@crypton: w takim razie możesz użyć jego kodu do debugowania swojego stosując test porównawczy:

Kopiuj
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;
}

CR
no ja domyslam sie w czym problem, w moim kodzie działa to wszystko poprawnie tylko dla a<10, niestesty nie mam pomyslu jak rozszerzyć to rownież na a>10
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Szczecin
0

Pokaż obecny kod.


CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0
Kopiuj
#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;
    }

}
S7
Użyj debugger i zobacz do jakiego ifa wejdziesz wpisując np 12, a do jakiego powinieneś wejść
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Szczecin
1

Dobra, to teraz zastanów się co się dzieje jak wpiszesz 12 jako podstawę. W którego ifa wchodzi, a w którego powinien?


S7
O_o, ale synchro xD
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

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"

S7
no to teraz wykombinuj jak zrobić żeby tam wchodził
kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Szczecin
1

Ok, to teraz jaka operacja pozwoli Ci z dowolnej liczby zakończonej 2 uzyskać wartość 2?


CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0

no zapewne modulo 10

czyli do tych warunkow pododawać jeszcze operatory logiczne "lub" i warunek z modulo 10?

edytowany 1x, ostatnio: kq
S7
Możesz też zmodyfikować a
CR
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:64
0
Kopiuj
#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ą ;>

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Szczecin
0

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.


edytowany 1x, ostatnio: kq
CR
okej, rozumiem, zmodyfikuję

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.