01/10/2018, 00:04
Ko biết có phải sai logic ko mà số ra to lắm ạ. giai thừa của các số nhỏ hơn và bằng 5
#include <stdio.h>
#include <stdlib.h>
long tinhGT(int N[]);
int main(int argc, char *argv[]) {
int N[5]={3,7,4,9,5};
tinhGT(N);
return 0;
}
long tinhGT(int N[5])
{
long gt=1;
int i;
for(i=0;i<5;i++)
{
if(N[i]<=5)
{
int j;
for(j=1;j<=N[i];j++)
{
gt=gt*j;
}
printf("giai thua cua %d:%ld
",N[i],gt);
}
}
return gt;
}
Bài liên quan
To là chuyện bình thường. Code bên trên tính giai thừa của các số nhỏ hơn hoặc bằng 5 rồi nhân lại hết với nhau còn gì.
Cụ thể trong trường hợp trên,
gt = 3! * 4! * 5!
.bài em đang cần tính gt của các số thôi chứ không cho nó nhân vào nhau ạ.
thế thì bạn tìm cách cho nó trả về 1 mảng hay đại loại thế chứ như bên trên bạn nhân tuốt vào
gt
rồi còn đâu.vẫn ko tìm đc cách giải quyết :’(
@Lương_Quang_Mạnh bạn giúp mình đc ko chứ nghĩ hoài ko ra …
Bài làm sai ngay từ đoạn khai báo hàm rồi, sửa gì nữa, có viết lại thì tốt hơn
Bạn có thể tham khảo code này:
Hơi lằng nhằng và có thể không phải tốt nhất vì nói thật là mình cũng chưa học đến pointer
Ý kiến của mình: thêm
gt = 1;
ngay sauint j;
, biếngt
cần phải reset lại giá trị. That’s itCó hơi liên quan là bạn code hơi lằng nhằng.
Output:
Tuy nhiên, code của bạn ấy chỉ return duy nhất một giá trị, giai thừa của số cuối cùng trong mảng nhỏ hơn hoặc bằng 5. Nếu không thay đổi kiểu dữ liệu trả về, sửa thế cũng không lợi lộc gì, trừ khi tính đến đâu in ra luôn đến đấy.
Tại mình thấy bạn đó muốn vậy mà Mình nghĩ bạn đó chỉ muốn viết hàm tình giai thừa và tự in ra màn hình luôn. Nếu muốn lấy lại tất cả giá trị thì nhét tụi nó vào lại 1 mảng rồi return. Mình thấy bạn đó để
return gt;
cho vui chứ đâu xử lý gì đâu, với lại có cả thông báo trong hàm như vậy thì không nhất thiết phải return giá trị làm gì.@Trong_Tran Lần sau bạn nên giải thích rõ là mục đích code của bạn, lỗi và yêu cầu chỉnh sửa nha. Lỗi thì phải có thông báo lỗi (hay đại loại là thứ gì không theo ý muốn) nữa nha. Không nên thách đố lại người giúp đỡ bạn
bạn sai ở đây vì chưa hiểu công thức tính giai thừa.
Cách bạn tính là dùng vòng lặp for(j=1;j<n;j++) rồi gán giá trị gt*=j chỉ đúng với trường hợp j=10(10! - cái này mình nghiên cứu từ video của anh Đạt) còn lại đối với giai thừa !=10 đều cho ra kết quả sai.
Tốt nhất bạn nên dùng phương pháp Đệ quy để tính
bạn nghiên cứu về đệ quy trong C nhé
Còn bạn nghiên cứu cái này nè. Post code kiểu đó coi nhức mắt lắm.
uk sorry mình chưa đọc bài đó