01/10/2018, 15:40
Cout có tự động xác định kiểu dữ liệu không?
Mình có 1 đoạn code nhỏ:
int main()
{
long long n;
cin>>n;
cout<<n*(n-1)*(n-2)/6;
}
Nếu mình đổi n thành int n thì mình nhận giá trị rác khi nhập vào 1 số lớn (như 2000). Cho mình hỏi như vậy cout sẽ cho kết quả dựa theo biến?
Bài liên quan
Trả lời câu hỏi của title: Không.
Code của bạn lỗi không phải do cout, mà là do bạn đặt kiểu dữ liệu sai.
Kết quả của phép tính phụ thuộc vào kiểu của các biến tham gia.
Nếu bạn đặt n là int, thì phép tính
n*(n-1)*(n-2)
của bạn sẽ nhân các số kiểu int với nhau và cho ra kết quả kiểu int.n = 2000 (int) -> phép tính =
2000 * 1999 * 1998 > 2^31-1
=> kết quả sẽ bị tràn số, sau đó chia 6 vẫn ra 1 số tràn toé loe. Thực ra nếu bạn biết2000 * 1999 * 1998 / 6 < 2^31-1
cũng chẳng làm được gì, C++ tính từ trái sang phải và số đã tràn ở chỗ phép nhân 3 số rồi.Nhưng nếu để n là long long, kết quả của phép tính nhân 3 số (và dĩ nhiên cả phép chia) vẫn trong khoảng giới hạn của biến.
Tức là phép toán biến long long sẽ cho ra kết quả long long đúng không ạ?
Về cơ bản là vậy. Nhưng nếu bạn tự dưng thích viết
thì kết quả sẽ có kiểu float.