Форум программистов, компьютерный форум CyberForum.ru

a^(b^c) - C++

Восстановить пароль Регистрация
 
Black_Doom
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 3
05.10.2013, 10:28     a^(b^c) #1
Помогите решить эту задачу: на вход подаётся три числа: a, b, c. При этом число b возводится в степень c, а число a в степень b^c. И надо вывести последнюю цифру такого числа. Я написал код, и он даже работает, но тестирующая система пишет, что моё решение проходит лишь 1 из 6 тестов. Какие тесты сказать не могу. Вот моё решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
using namespace std;
 
int main()
{
long long a, n, b, cpower = 1;
cin >> a >> n >> b;
long long power(long long a, long long n);
long long currentPower = 1;
while (n > 0)
    {
        if (n & 1)
        {
            currentPower *= a;
        }
        a *= a;
        n >>= 1;
    }
 
    long long power(long long b, long long currentPower);
    while (currentPower > 0)
 
    {
        if (currentPower & 1)
        {
            cpower *= b;
        }
        b *= b;
        currentPower >>= 1;
    }
    cout << cpower % 10;
}
Помогите найти ошибки, пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zer0mail
2187 / 1870 / 187
Регистрация: 03.07.2012
Сообщений: 6,656
Записей в блоге: 1
05.10.2013, 10:59     a^(b^c) #2
Возьми для примера: a=29,b=17,c=13
Black_Doom
0 / 0 / 0
Регистрация: 26.09.2013
Сообщений: 3
05.10.2013, 12:31  [ТС]     a^(b^c) #3
Немного переделал код, тепрь он проходит 4 теста из 7. Но ошибки всё равно есть. Можете, пожалуйста, сказать, какие:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
 
using namespace std;
 
int main()
{
long long a, b, c;
cin >> a >> b >> c;
long long power(long long b, long long c);
long long currentPower = 1;
while (c > 0)
    {
        if (c & 1)
        {
            currentPower *= b;
        }
        b *= b;
        c >>= 1;
    }
long long cpower = 1;
long long power(long long a, long long currentPower);
while (currentPower > 0)
    {
        if (currentPower & 1)
        {
            cpower *= a;
        }
        a *= a;
        currentPower >>=1;
    }
    cout << cpower % 10;
    return 0;
}
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
05.10.2013, 15:20     a^(b^c) #4
Длинная арифметика тут не нужна
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <algorithm>
#include <iostream>
#include <vector>
 
using namespace std;
 
unsigned IntPowMod(unsigned a, unsigned b, unsigned m)
{
    a %= m;
    unsigned result = 1;
    while (b--)
        result = result * a % m;
    return result;
}
 
int main()
{
    unsigned a, b, c;
    cin >> a >> b >> c;
    if (b == 0)
    {
        cout << 1 << endl;
        return 0;
    }
    a %= 10;
    vector<unsigned> d;
    for (unsigned t = a; find(d.begin(), d.end(), t) == d.end(); t = t * a % 10)
        d.push_back(t);
    unsigned m = d.size();
    cout << d[(IntPowMod(b, c, m) + m - 1) % m] << endl;
}
Yandex
Объявления
05.10.2013, 15:20     a^(b^c)
Ответ Создать тему
Опции темы

Текущее время: 05:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru