Đoạn code tính dãy căn bị sai

Em có đoạn code này mà em nghĩ miết không ra lỗi ạ. Mong có ai cao nhân chỉ dùm em ạ.
BÀI này tìm tổng


Lỗi như thế này ạ : em nhập vào số 30 thì nó hiện ra " nan " ạ .

#include <iostream>
#include<cmath>
int giaithua(int i)
{
    if(i==1) return 1;
 return (i*(giaithua(i-1)));
}
void TinhTong_11(int n, double &S)
{
    for(int i=1;i<=n;i++)
    {
        S=sqrt(giaithua(i)+S);
    }
}
int main() {
    int n;
    double S;

    std::cin >> n;
    TinhTong_11(n, S);
    std::cout << S;

    return 0;
}

30! vượt quá 64 bit :slight_smile: nên tính sẽ ko đúng. Tính nguyên con một lúc thì đến float còn không đủ (chạm trần). Vậy double là đúng.

3 Likes

30! à… :thinking:
Bạn nên bắt đầu tìm hiểu về “Big Integer” nếu muốn tính toán theo phương pháp đó.

3 Likes

Bài này hồi đó không có dấu ! mà đã sửa cho mấy lượt rồi :smiley:

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?