Potegowanie liczb

0

Witam, rozwiązuje zadanie "PA05_POT - Czy umiesz potęgować" ze strony http://pl.spoj.com/problems/PA05_POT/

Zadanie
Napisz program, który:
wczyta ze standardowego wejścia: podstawę a oraz wykładnik b,
wyznaczy ostatnią cyfrę liczby ab,
wypisze wynik na standardowe wyjście.
Wejście
W pierwszej linii wejścia znajduje się jedna liczba całkowia D (1≤D≤10), oznaczjąca liczbę przypadków do rozważenia. Opis każdego przypadku podany jest w jednym wierszu, zawierającym dwie liczby naturalne a i b oddzielone pojedynczym odstępem (spacją), takie, że (1 ≤ a,b ≤ 1 000 000 000).

Wyjście
Dla każdego przypadku z wejścia Twój program powinien wypisać (w osobnej linii dla każdego przypadku z wejścia) cyfrę jedności liczby ab zapisanej dziesiętnie.

Przykład
Dla danych wejściowych:
2
2 3
3 3
poprawną odpowiedzią jest:
8
7

Oto mój kod programu:

// SpoiPotegowanie.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <string>
#include <stdio.h>

using namespace std;
int a, b, ile, x;
int ostliczba;
string temp;


int main()
{
    cin >> ile;
    for (int i = 1; i <= ile; i++)
    {
        cin >> a >> b;
        x = pow(a, b);
        cout << x << endl;
    }


    if (ile > 1)

    {

        string temp = to_string(x);
        cout << temp[temp.size() - 1] << endl;
    }


    getchar();
    getchar();
    return 0;
}

Mam błedny wynik. Pierwszy wynik wychodzi prawidłowo a drugi wynik jest tez poprawny ale oprócz ostatniej liczby pokazuje mi takze wynik potegi, którego nie powinno pokazywać. Powinnien w drugim wyniku pokazywać tylko ostatnią liczbę potęgowania.... Co zrobilem w kodzie zle...? Siedzę nad tym parę godzin.. Pozdrawia

2

Nie potrzebujesz podnosić a^b, aby wiedzieć, jaka będzie ostatnia cyfra potęgi.
O to też chodzi w tym zadaniu, aby się wykazać sprytem, a nie lecieć na pałę "bo jak napisali potęga, to trzeba potęgować!".

0
Patryk27 napisał(a):

Nie potrzebujesz podnosić a^b, aby wiedzieć, jaka będzie ostatnia cyfra potęgi.
O to też chodzi w tym zadaniu, aby się wykazać sprytem, a nie lecieć na pałę "bo jak napisali potęga, to trzeba potęgować!".

Dzięki za odpowiedz. Jak rozumiem to muszę to zrobić inna metodą niz mam przez "pow"? Pozdrawiam Pokombinuję

1

Odpowiem: co to jest potęgowanie (a²)? Które cyfry liczby a mają wpływ na ostatnią cyfrę liczby a²?

1

Miało być "podpowiem", z kolei a² miało być do ułatwienia…

2
#include <iostream>
#include <string>
#include <cmath>
using namespace std;

template<typename F>
void perform(size_t times, F action) {
	while(times --> 0) {
		action();
	}
}

namespace input {
	size_t times(istream &in) {
		size_t result;
		in >> result;
		return result;
	}
	
	struct data_row {
		unsigned a, b;
		data_row(istream &in) 
		{ in >> a >> b; }
	};
}

namespace logic {
	struct result {
		int value;
	};
	
	result compute(input::data_row const &data) {
		return {static_cast<int>(round(pow(data.a%10, 4+data.b%4))) % 10};
	}
}

namespace view {
	void result(logic::result const &res) {
		cout << res.value << endl;
	}
}

int main() {
	perform(input::times(cin), []{
		auto data = input::data_row(cin);
		auto computed = logic::compute(data);
		view::result(computed);
	});
	return 0;
}

To trochę jakby dać gotowca i jednocześnie wcale go nie dawać :')

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