Напишите программу, которая позволит пользователю умножать и делить пары целочисленных дробей и предоставлять результирующую дробь и десятичное представление в виде двойного числа с двумя десятичными знаками.
Ниже приведу код, который я пробовал
#include <stdio.h>
int
main(void) {
int a, b, c, d, g, h, j, k;
double e, f, l, m, n, o;
//lets get our inputs//
printf("Whats the first numerator:");
scanf_s("%d", &a);
printf("whats the first denominator(cannot be zero):");
scanf_s("%d", &b);
printf("whats the second numerator:");
scanf_s("%d", &c);
printf("whats the second denominator(cannot be zero):");
scanf_s("%d", &d);
//calulate the division
(__int64)e = (a / b);
(__int64)l = (d / c);
(__int64)m = e * l;
//calculate the multiplication
(__int64)f = (__int64)(a / b) * (__int64)(c / d);
//im just gonna display the actual value of numerator * numerator
g = (a * c);
//same for the denominator
h = (b * d);
//handled the fraction for multiplying so now its time to make the keep change flip
j = (a * d);
k = (b * c);
printf("\n(%d/%d) / (%d/%d): the resulting fraction is %d/%d\nthe decimal representation is %.2f\n", a, b, c, d, j, k, m);
printf("\n(%d/%d) * (%d/%d): the resulting fraction is %d/%d\nthe decimal representation is %.2f\n\n", a, b, c, d, g, h, f);
return(0);
}
Так что я почти уверен, что происходит переход от 4-байтового значения к 8-байтовомузначение, превращая целое число в двойное, но все же я не знаю, как преобразовать его в больший размер в байтах, но Visual Studio говорит, что (__int64)
исправляет это.Тем не менее, мой вывод для дробей работает, но мои десятичные дроби всегда отображаются как 0,00, потому что значение теряется, когда значение приведения увеличивается с 4 байтов до 8 байтов.(Если я ошибаюсь по этому поводу, пожалуйста, исправьте мое понимание, чтобы я мог быть лучше в области компьютерной науки в целом.)