#include typedef struct rational { int a; int b; } RATIONAL; int gcd(int a, int b){ int r; r = a % b; while ( r != 0 ){ a = b; b = r; r = a % b; } return b; } void reduce(RATIONAL *p){ int c; c = gcd(p->a, p->b); p->a /= c; p->b /= c; } RATIONAL add(RATIONAL x, RATIONAL y){ RATIONAL z; z.a = (x.a * y.b) + (y.a * x.b); z.b = x.b * y.b; reduce(&z); return z; } void print_r(RATIONAL x ){ printf("%d/%d", x.a, x.b); } int main(void){ RATIONAL x, y, z; printf("有理数 x の分子と分母を入力してください:"); scanf("%d %d", &(x.a), &(x.b)); printf("有理数 y の分子と分母を入力してください:"); scanf("%d %d", &(y.a), &(y.b)); reduce(&x); reduce(&y); z = add(x,y); print_r(x); printf(" + "); print_r(y); printf(" = "); print_r(z); printf("\n"); return 0; }