Đúng là code của bạn đúng theo định nghĩa của số fibonaci. Nhưng vì bạn khai báo kiểu int a[100] (tức các phần tử chỉ được phép đến mức giới hạn của int, mà bạn lại chạy n=99 nên số fibonaci sinh ra lớn hơn cả kiểu int vì thế bị chuyển lại số âm).
Thế thôi, bạn thử dùng kiểu double cũng cho ra kết quả, nhưng sẽ hiện kết quả theo kiểu double (tât nhiên cũng chỉ đến mức tối đa của double thôi). Tốt nhất là cài đặt số lớn sẽ cho ra kết quả đúng nhất.