Lỗi khi cài đặt thuật toán fibonacci

Chào các bạn, hình mình up lên là code mình viết về bài toán Dãy Fibonacci, nhìn thì có vẻ ổn rồi và mình cũng đã chạy được rồi. Nhưng mình gặp 1 vấn đề đó là : khi mình nhập vào một số nguyên dương N bất kỳ, ví dụ mình nhập vào : từ 1 đến 46 thì nó output ra số Fibonacci tương ứng ok rồi ạ, nhưng lúc mình nhập vào từ 47 trở lên, lên đến 100 thì nó toàn ra số âm ạ. Khúc này mình vẫn chưa hiểu lắm, và mình vò đầu bứt tai mấy ngày vẫn ko tìm ra cách giải quyết được . Xin nhờ các bạn chỉ giúp ra vấn đề giùm mình ạ , và mình nên giải quyết như thế nào đây ạ @@. Cảm ơn các bạn nhiều !
tại vì số nguyên kiểu
int
chỉ chứa được tới giá trị 2 tỷ, quá 2 tỷ nó tràn số thành số âmÀ ra là vậy ạ, vậy giờ cho mình xin hỏi là mình phải thay kiểu int thành kiểu khác hả bạn @@??
muốn bự hơn thì xài
long long
, giá trị nó chứa được tới 9 tỷ tỷ (263 - 1), đủ sức chứa tới n = 90.muốn bự hơn nữa thì đáng tiếc thư viện chuẩn của C++ ko có kiểu BigInteger, phải xài thư viện ngoài, cài đặt khó khăn với newbie, thôi chấp nhận đỡ
long long
điOh, cảm ơn bạn nhiều nhé, mình đã thay đổi và làm dc rồi, nhưng mình muốn tới n=100 thì giờ phải xài thêm thư viện ngoài và cài đặt kiểu khác hả bạn . Bạn gợi ý thêm cho mình cách làm dc ko, mình sẽ lên mạng và tìm hiểu thêm ạ @@
n=100 thì dùng kiểu bignum.
mất công lắm, bạn phải hiểu trình biên dịch là gì, rồi hiểu các giai đoạn biên dịch và liên kết, rồi mới biên dịch thư viện tương ứng cho trình biên dịch… @_@
thôi bạn gu gồ đỡ Boost.Multiprecision với MPIR
nếu chỉ xài phép cộng thì bạn tự viết class BigInteger cũng được, coi như làm bài tập
Cho mình xin hỏi kiểu bignum là sao ạ , mình mới là newbie thôi ạ @@
Ok, cảm ơn bạn nhiều ạ đã giúp đỡ mình tận tình ạ, mình sẽ tìm hiểu mấy cái bạn hướng dẫn cho mình ạ
Bignum lưu trữ và tính bao nhiêu chữ số cũng được, do kích thước không bị cố định.
Chưa xài
new[]
được thì lấy int[20] cũng được (cơ số 10^9).Cảm ơn bạn nhé, để mình làm thử xem sao @@
hàng cùi bắp tự chế nè
kiểm tra ở http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibtable.html thấy 300 số Fibo đầu tiên in ra đúng
Oh, cảm ơn bạn nhiều nhé. Mà hình như mình có chạy thử thì nó phát sinh lỗi ạ :’( . Bạn coi giùm mình vs :’(
end(data)
là cái gì hả bạn? Mà sao truy cập mảng lại có chỉ số -1, -2 thế kia?Đừng screenshot màn hình code thế này, hãy up code lên.
Phải là
data.end()
chứ http://en.cppreference.com/w/cpp/container/vector/endThớt copy nguyên con thì 99% là sẽ bị hỏi vặn.
Thêm include
<iterator>
vô nữa @_@Ehehe độc chiêu này chôm từ Python qua đó, vector::end là valid iterator, có điều ko truy cập đc, nhưng phần tử trước nó [-1] sẽ truy cập đc nếu vector ko empty. Thành ra viết kiểu end(data)[-1] để truy cập phần tử cuối cùng cho nó giống Python p[-1]
Ấy, chuẩn C++ nào thế anh? Vụ này mới quá. Thảo nào em cứ thấy có mùi Python đâu đấy ~~
C++11 mà thôi dùng C++03 là làm được bài này rồi.
C++11
Chuẩn thì vector::end() - 1 trả về iter hợp lệ nếu vector ko empty, nên end§[-1] cũng hợp lệ nếu p ko empty. Truy cập phần tử cuối cùng xài back() cũng đc nhưng phang -1 cho nó Pythonista, với lại -2 nữa cũng đẹp.