F. Tính tổng các số nguyên lẻ
Nhập vào \(N\) số nguyên và in ra tổng \(N\) số nguyên lẻ trong số đó
Đầu vào
● Dòng đầu chứa số nguyên \(N\)
● Dòng sau, chứa \(N\) số nguyên cách nhau một dấu cách.
Đầu ra
In ra tổng các số nguyên lẻ trong số các số nguyên đã nhập
Ràng buộc
● 1 ≤\(N\)≤\(10^{6}\)
● Các số nguyên có giá trị tuyệt đối không quá \(10^{6}\)
input
5
1 -1 -13 1 -1
output
-13
Khi nào dùng int, khi nào dùng long long trong C++?
- Dùng
intkhi bạn chắc chắn giá trị sẽ không bao giờ vượt quá 2 tỷ (2 x 10^9). - Dùng
long longkhi giá trị có thể vượt quá 2 tỷ, hoặc đơn giản là khi bạn không chắc chắn.
Khi nào dùng int?
Giới hạn: Khoảng -2,147,483,648 đến 2,147,483,647 (hơn 2 tỷ).
int là lựa chọn mặc định và đủ dùng cho rất nhiều trường hợp phổ biến:
- Vòng lặp và chỉ số mảng: Khi bạn lặp qua một mảng có số phần tử không quá lớn (ví dụ: N ≤ 106), biến đếm
idùngintlà đủ.int n = 100000; for (int i = 0; i < n; ++i) { // ... } - Đếm số lượng, tần suất: Ví dụ đếm số lần xuất hiện của một ký tự, một số...
- Giá trị được giới hạn rõ ràng bởi đề bài: Khi đề bài cho "giá trị các phần tử không vượt quá 1000" hoặc "N không quá 105".
Khi nào phải dùng long long?
Giới hạn: Khoảng -9 x 1018 đến +9 x 1018 (9 tỷ tỷ).
Đây là "vũ khí hạng nặng" khi bạn đối mặt với các con số khổng lồ. Hãy dùng long long ngay lập tức trong các trường hợp sau:
- Phép nhân hai số lớn: Đây là cái bẫy phổ biến nhất! Kể cả khi hai số ban đầu là
int, tích của chúng có thể dễ dàng vượt quá giới hạn củaint.- Ví dụ:
100,000 * 100,000 = 10,000,000,000(10 tỷ), con số này lớn hơn 2 tỷ và sẽ gây tràn số nếu bạn lưu trong kiểuint.
- Ví dụ:
- Tính tổng của nhiều số: Khi bạn cộng dồn nhiều số, tổng cuối cùng có thể rất lớn.
- Ví dụ: Tính tổng của một mảng có 105 phần tử, mỗi phần tử có giá trị là 109. Tổng có thể lên tới 1014, chắc chắn phải dùng
long long.
- Ví dụ: Tính tổng của một mảng có 105 phần tử, mỗi phần tử có giá trị là 109. Tổng có thể lên tới 1014, chắc chắn phải dùng
- Yêu cầu đề bài có số lớn: Khi đề bài ghi rõ "giá trị có thể lên tới 1012" hoặc "1018".
- Bài toán về tiền tệ, thiên văn, tổ hợp: Những bài toán có ngữ cảnh thực tế thường liên quan đến những con số rất lớn.
Quy tắc "Vàng" và Mẹo
Quy tắc vàng: Khi nghi ngờ, hãy dùng long long.
Trong các kỳ thi lập trình, việc dùng long long thay cho int hầu như không ảnh hưởng đến tốc độ chạy của chương trình, nhưng nó sẽ cứu bạn khỏi những lỗi tràn số ngớ ngẩn. An toàn là trên hết!
Cảnh báo bẫy nhân số:
Xem đoạn code sau:
int a = 100000;
int b = 100000;
// SAI! Phép tính a * b được thực hiện bằng int, gây tràn số TRƯỚC KHI gán cho c
long long c = a * b;
// Kết quả của c sẽ bị sai!Cách sửa đúng:
Để đảm bảo phép nhân được thực hiện bằng long long, bạn cần "ép kiểu" một trong hai toán hạng lên long long trước khi nhân. Cách dễ nhất là nhân với 1LL (số 1 kiểu long long).
int a = 100000;
int b = 100000;
// ĐÚNG! 1LL * a sẽ biến kết quả thành long long, sau đó mới nhân với b
long long c = 1LL * a * b;
// c sẽ mang giá trị đúng là 10000000000
Comments