2013-04-13 4 views
1

Я хочу, чтобы вычислить квадратный корень из числа которых было больше, чем 15 цифр, если это возможно для 100 цифр было бы здоровоПроверьте, соответствует ли число а PerfectSquare (число имеет более чем 15 цифр)

номер как 100000000000000

в настоящее время я использую C с целым в качестве типа

int IsPerfectSquare(int number) 
{ 

    if (number< 0) 

    return 0; 

    int root = (round(sqrt(number))); 

    if(number == (root * root)) 

    {   
     return 1;  
    }  
    else 
    {   
     return 0;  
    } 
} 

данных Но делает двойной или длинный двойной может содержать 15 цифр или более

Язык нет бара. я могу код в C#, а также

Спасибо :)

+0

Получение квадратного корня - это бит. Проверьте [эту тему] (http://stackoverflow.com/questions/3432412/calculate-square-root-of-a-biginteger-system-numerics-biginteger) для возможного решения. –

+1

Думаю, вы не должны задавать такие вопросы [во время конкурса] (https://code.google.com/codejam/contest/2270488/dashboard#s=p2). – svick

ответ

2

В C# вы можете использовать decimal, чтобы получить до 29 цифр и BigInteger, чтобы получить произвольно много цифр.

Однако вам понадобится другой метод, чтобы узнать, является ли 100-значный BigInteger идеальным квадратом, поскольку нет никакой «корневой» функции, которая я знаю.

+0

Вы всегда можете использовать вариацию вавилонского метода для схождения на квадратный корень из числа: http://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method – Patashu

+0

@Patashu: Существует множество способов вычисления квадратного корня целого числа. См. Связанные дублированные ответы для некоторых примеров. –

0

В C++, вы можете проверить, сколько BIGS долго двойной может удерживать с помощью следующей функции:

std::cout << std::numeric_limits<long double>::digits10 << std::endl; 

Если вы действительно хотите иметь дело с цифрами с цифрами 100, вам нужно закодировать свой собственный класс BigInteger.

0

Размер целого числа в C зависит от платформы, поэтому нет гарантии того, сколько цифр оно может удерживать. Вы можете посмотреть в GNU Multiple Precision math library для работы с большими числами в C.