Вывод больших чисел искажает результат вычислений - C (СИ)
Формулировка задачи:
Есть задача написать программу, которая считывая из входного файла два числа вычисляет их НОД и НОК и записывает в выходной файл. Программа работает отлично, есть одно <НО>: когда на входе числа 13 1000000000 ответ выводится не верный, так как число получается слишком большое. Вывод осуществляю функцией fprintf_s, буду очень благодарна за помощь.
Решение задачи: «Вывод больших чисел искажает результат вычислений»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
#include <conio.h>
unsigned long int NOD(unsigned long int a, unsigned long int b) {
while (b) b ^= a ^= b ^= a %= b;
return a;
}
unsigned long int main(void)
{
unsigned long int a, b, GCD, LCM;
FILE * fin;
FILE * fout;
fopen_s(&fin, "D:\\input.txt", "r");
fopen_s(&fout, "D:\\output.txt", "w");
printf("Openning file...");
if (fin == NULL)
{
printf_s("\nError! Can not open file. Press any key to exit.");
_getch();
return 0;
}
if (fout == NULL) {
printf_s("Error! Can not create file: '%s'. Press any key to exit.");
_getch();
return 0;
}
fscanf_s(fin, "%d %d", &a, &b);
if ((a >= 1) && (a <= (pow(10, 9))) && (b >= 1) && (b <= (pow(10, 9))))
{
GCD = NOD(a, b);
LCM = (a * b) / GCD;
fprintf_s(fout, "%d %d", GCD, LCM);
}
else
{
printf("\nError! Input data not correct. Press any key to exit.");
_getch();
return 0;
}
fclose(fin);
fclose(fout);
return 0;
}