Potęgowanie C++

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

a czego? bo nie mam pomysłu

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • 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

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

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

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

jakieś pomysły?

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
0

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

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

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

vpiotr
  • Rejestracja: dni
  • Ostatnio: dni
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;
}

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
0

Pokaż obecny kod.

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • 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;
    }

}
kq
  • Rejestracja: dni
  • Ostatnio: dni
  • 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?

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • 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"

kq
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
1

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

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
0

no zapewne modulo 10

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

CR
  • Rejestracja: dni
  • Ostatnio: dni
  • 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
  • Rejestracja: dni
  • Ostatnio: dni
  • 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.

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.