2014-10-03 4 views
0

Я получаю два номера. Первое натуральное число n и второе n-значное число. n диапазон - 1<=n<=50000. Проблема в том, как я могу сделать n * n на больших числах, например, 49000 цифр. Я пытался сделать это на строке, тогда у меня есть массив с каждой цифрой, но что тогда? Записать функцию, которая умножает n * n на строку? У меня не было идеи, как начать. Есть идеи?Проверьте, является ли номер автоморфным

EDIT Я проверяю, является ли номер automorphic, но как отредактировать его для работы с цифрами до 50000 цифр?

#include <cstdlib> 
#include <iostream> 

using namespace std; 

int main() { 
    unsigned int n, m = 10, a, b; 

    cin >> n; 

    b = m; 
    while (n > b) { 
     b *= m; 
    } 

    a = (n * n) % b; 

    if (a == n) 
     cout << "OK"; 
    else 
     cout << "NO"; 

    return 0; 
} 
+3

Напишите код для своей домашней работы –

+0

Для тех, кто не знает, [автоморфный номер] (http://en.wikipedia.org/wiki/Automorphic_number) - это число, квадрат которого «заканчивается» теми же цифрами, что и сам номер. – Jarod42

+0

Я написал программу, которая проверяет, является ли число автоморфным, но работает только, например, для long int. Есть ли тип, который может хранить 50000 цифр? – user2948474

ответ

0

Они различные способы борьбы с большим междунар в C++

  • Используя библиотеку, как boost::xint, Matt McCutchen bigint, InfInt и т.д ...
  • Ведение необходимой операции вручную (если у них не так много операций, вы могли бы реализовать), в этом случае вам понадобится только умножение (модуль имеет мощность 10 и может быть легко реализован), вы можете использовать fo r пример std::vector<unsigned char>, чтобы сохранить цифры n и умножить их на обучение в школе, по цифре и сообщить последние цифры.

Примечание: вы могли бы сделать только часть умножения для получения последних цифр, необходимых (по заботиться с тем, сколько вам нужно, для цифр, необходимых). Для 5000 цифр выполнение всего умножения закончится быстро.

+0

Но когда у меня есть символ, как я могу его умножить? – user2948474

+0

вы использовали, как если бы были цифры (0-9), и поддерживать перенос в умножениях и вставлять при начале, если необходимо. – NetVipeC

Смежные вопросы