Вывод больших чисел искажает результат вычислений - 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;
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы