Нужно вычислить НОД для чисел имеющий размер до 10^18, long long недостаточно. Как работать с числами таких размеров? p.s. Требуется реализация исключительно средствами языка и STL. p.p.s. Заодно покритикуйте имеющийся код:
#include <iostream>
using namespace std;
typedef unsigned long long ULL;
// объявление переменных, которые понадобятся в функциях.
ULL N=0, M=0, res=0;
short D=0;
// вычисление чисел
ULL ch(ULL digits)
{
ULL ch=0;
for(ULL i=0;i<digits;i++)
{
ch*=10;
ch+=D;
}
return ch;
}
// вычисление НОД
ULL f_NOD(ULL ch1, ULL ch2)
{
ULL NOD=1 ;
for (short i=2;i<10;i++)
{
while(ch1 % i == 0 && ch2 % i == 0) //пока имеется общее кратное число увеличиваем НОД
{
NOD *=i;
ch1 /=i;
ch2 /=i;
}
}
return NOD;
}
// heh
int main()
{
cin >> N >> M;
cin >> D;
cout << f_NOD(ch(N),ch(M)) << endl;
return 0;
}