30/09/2018, 20:07

Nhap 2 số tự nhiên n,m, in ra màn hình giá trị biểu thức:(n!+m!)/(n+m)!

int n,i,T,m,j,K,L,g;
printf("Nhap vao n= ");
scanf("%d",&n);
printf("Nhap vao m= ");
scanf("%d",&m);
T=1;
K=1;
L=1;
for (i=1; i<=n; i++)
{
    T = T * i;
}
printf ("T=%d",T);

for (j=1; j<=m; j++)
{
    K= K * j;
}
printf("
K=%d",K);

for (g=1; g<=(n+m); g++)
{
    L = L * g;
}
printf("
L=%d",L);

float F=(T+K)/L;
printf("
 Gia tri bieu thuc la %f ",F);
getch ();
return 0;
}

Mọi người cho em hỏi tại sao giá trị cuối cùng của biểu thức là 0 vậy ạ?

Gió viết 22:16 ngày 30/09/2018

Bởi vì (m! + n!) < (m+n)! Khi m>1 hoặc n>1 do đó kết quả phép chia kiểu int luôn cho kết quả = 0
dấu = khi m=n=1

ThuThao viết 22:21 ngày 30/09/2018

nhung bên trên e ép kiểu float rồi mà!!

Gió viết 22:13 ngày 30/09/2018

Ép kiểu đó là chia xong mới ép

    F=1.*(T+K)/L;
    
ThuThao viết 22:08 ngày 30/09/2018

em đã thử lại… ra kq…
Nhưng em vẫn ko hiểu về cái ép kiểu F=1.*(T+K)/L;

Gió viết 22:17 ngày 30/09/2018

Có thể ép theo kiểu (float) nhưng do lười đánh chữ . Cách này đúng bởi vì:
*khi làm việc với số thì nó tự chuyển sang kiểu có kích thước lớn hơn

Bài liên quan
0