Zadanie ze SPOJa - "Czy umiesz potęgować" - czy program jest dobry?

0

Cześć, mam problem z tym zadaniem, wydaje mi się że powinno być dobrze ale na pewno nie wziąłem czegoś pod uwagę

#include <cmath>
#include "stdio.h"
#include "stdlib.h"
using namespace std;
int modulopow(int a, int b, int m = 10)
{
int i;
int result = 1;
long int x = a%m;

for (i=1; i<=b; i<<=1)
{
x %= m;
if ((b&i) != 0)
{
result *= x;
result %= m;
}
x *= x;
}

return result;
}

int main()
{
    int iloscprzypadkow;
    long int a, b;

    cin >> iloscprzypadkow;
    for(int i = 0; i < iloscprzypadkow; i++)
    {
        cin >> a >> b;
        if(a >= 1 && a <= 1000000 && b >= 1 && a <= 1000000){
            cout << modulopow(a, b) << endl;
        }
    }
}

poprawienie tytułu wątku i dodanie znacznika <code class="cpp"> - fp

0

Wysłałem na spoja i mi wyrzuca błąd.

0

W tym zadaniu nie chodzi o potegowanie.

0

W zadaniu powinieneś wypisać ostatnią cyfrę wyniku potęgowania i tak robisz. Ale może błąd jest przez to, że dałeś większe ograniczenia na wprowadzane dane. W treści jest a,b >=1 && a,b <=1000 000 000 a Ty masz a <=1000000 a b nieograniczone od góry (masz błąd w if'ie). Może teżjest problem z tym co includujesz, próbowałeś to zmienić na <iostream>?

0

@Mikios, nie sądzisz, że należałoby podać/podlinkować treśc zadania?

0

Przepraszam, wypadałoby :D Tu jest link do zadania: http://pl.spoj.com/problems/PA05_POT/ . Kod poprawiłem dodając ilość przypadków. Include <iostream> było od początku tylko się nie pokazało na stronie.

0

Kod wygląda aktualnie tak:

 #include <iostream>
#include <cmath>
using namespace std;
int modulopow(int a, int b, int m = 10)
{
int i;
int result = 1;
long int x = a % m;

for (i=1; i<=b; i<<=1)
{
x %= m;
if ((b&i) != 0)
{
result *= x;
result %= m;
}
x *= x;
}

return result;
}

int main()
{
    int iloscprzypadkow;
    unsigned long int a, b;

    cin >> iloscprzypadkow;
    if(iloscprzypadkow >= 1 && iloscprzypadkow <= 10){
    for(int i = 0; i < iloscprzypadkow; i++)
    {
        cin >> a >> b;
        if(a >= 1 && a <= 1000000 && b >= 1 && b <= 1000000){
            cout << modulopow(a, b) << endl;
        }
    }
}
}
0

Wypisz sobie kolejne potęgi dowolnej liczby, i przyjrzyj się ostatnim cyfrom.

1

Wg mnie wyniki masz dobre ale nadal masz złe ograniczenia.

0

Jaki jest sens sprawdzania inputu na spoju? Przeciez te zakresy sa tylko po to, zeby wiedziec jaki algorytm napisac :-|

0

Na tym forum wklejałem dwuwierszowe rozwiązanie tego zadania.

0

Baa na tym forum jest gotowiec nie tylko w c++

1 użytkowników online, w tym zalogowanych: 0, gości: 1