02/10/2018, 14:13
[Struct] Cộng 2 phân số căn bản
Yêu cầu xây dựng cấu trúc Phân số (gồm tử và mẫu). Viết chương trình nhập vào 2 phân số, yêu cầu xuất phân số tổng của 2 phân số đó (sau khi rút gọn ra màn hình) Nếu input có phân số nào có mẫu bằng 0 thì xuất kết quả ra -1 ví dụ 1: input 1 2 1 3 output 5/6 ví dụ ...
Yêu cầu xây dựng cấu trúc Phân số (gồm tử và mẫu).
Viết chương trình nhập vào 2 phân số, yêu cầu xuất phân số tổng của 2 phân số đó (sau khi rút gọn ra màn hình)
Nếu input có phân số nào có mẫu bằng 0 thì xuất kết quả ra -1
ví dụ 1:
input
1 2
1 3
output
5/6
ví dụ 2:
input
1 2
1 0
output
-1
Link nộp bài: http://upcoder.hcmup.edu.vn/index.php/problems/submit/343/01e2663585613fe2026ef385bd7034dc/C%E1%BB%99ng_2_ph%C3%A2n_s%E1%BB%91
Code tham khảo:
#include <iostream>
#include <stdio.h>
#include <cmath>
using namespace std;
struct phanso
{
int tu;
int mau;
};
phanso a,b, tong;
void nhapdl()
{
cin >>a.tu >> a.mau;
cin >>b.tu >> b.mau;
}
int ucln(int a, int b)
{
int r;
while (a%b!=0)
{
r=a%b;
a=b;
b=r;
}
return b;
}
int main( )
{
nhapdl();
if (a.mau==0 || b.mau==0)
{
cout << "-1";
return 0;
}
tong.tu = a.tu*b.mau + a.mau*b.tu;
tong.mau = a.mau*b.mau;
int UC = ucln(tong.tu,tong.mau);
cout << tong.tu/UC << "/"<< tong.mau/UC;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <iostream> #include <stdio.h> #include <cmath> using namespace std; struct phanso { int tu; int mau; }; phanso a,b, tong; void nhapdl() { cin >>a.tu >> a.mau; cin >>b.tu >> b.mau; } int ucln(int a, int b) { int r; while (a%b!=0) { r=a%b; a=b; b=r; } return b; } int main( ) { nhapdl(); if (a.mau==0 || b.mau==0) { cout << "-1"; return 0; } tong.tu = a.tu*b.mau + a.mau*b.tu; tong.mau = a.mau*b.mau; int UC = ucln(tong.tu,tong.mau); cout << tong.tu/UC << "/"<< tong.mau/UC; } |
Code tham khảo cộng 2 phân số, sử dụng toán tử
#include <iostream>
using namespace std;
class phanso
{
private:
int tu, mau;
public:
phanso(){}
phanso operator+(phanso b);
friend istream &operator >> (istream &in, phanso &ps);
friend ostream &operator << (ostream &out, phanso ps);
};
istream &operator >> (istream &in, phanso &ps)
{
in >> ps.tu >> ps.mau;
return in;
}
ostream &operator << (ostream &out, phanso ps)
{
if (ps.mau == 0)
out << "-1";
else
out << ps.tu << "/" << ps.mau;
return out;
}
int ucln(int a, int b)
{
int r;
while (b>0)
{
r = a%b;
a = b;
b = r;
}
return a;
}
phanso phanso::operator+(phanso b)
{
phanso c;
c.tu = tu*b.mau + mau*b.tu;
c.mau = mau*b.mau;
int z = ucln(c.tu, c.mau);
c.tu /= z;
c.mau /= z;
return c;
}
int main()
{
phanso a, b;
cin >> a >> b;
cout << a + b;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include <iostream> using namespace std; class phanso { private: int tu, mau; public: phanso(){} phanso operator+(phanso b); friend istream &operator >> (istream &in, phanso &ps); friend ostream &operator << (ostream &out, phanso ps); }; istream &operator >> (istream &in, phanso &ps) { in >> ps.tu >> ps.mau; return in; } ostream &operator << (ostream &out, phanso ps) { if (ps.mau == 0) out << "-1"; else out << ps.tu << "/" << ps.mau; return out; } int ucln(int a, int b) { int r; while (b>0) { r = a%b; a = b; b = r; } return a; } phanso phanso::operator+(phanso b) { phanso c; c.tu = tu*b.mau + mau*b.tu; c.mau = mau*b.mau; int z = ucln(c.tu, c.mau); c.tu /= z; c.mau /= z; return c; } int main() { phanso a, b; cin >> a >> b; cout << a + b; return 0; } |
keywords: Bài tập căn bản liên quan đến cấu trúc struct