// ── TYPE PROMOTION (Higher Data Type Wins) ───────────────────────
char → int → long → long long → float → double
cout << 'c' + 1; // 100 ('c'=99)
cout << 7 / 2; // 3
cout << 7 / 2.0; // 3.5
// ⚠️ If one operand is double → whole calculation becomes double
// ── CALCULATE FIRST → STORE LATER ────────────────────────────────
double a = 7 / 2; // 3.0
double a = 7 / 2.0; // 3.5
int a = 7 / 2.0; // 3
// Rule:
// expression evaluated first
// then stored in variable type
// ── INTEGER RANGES (CP QUICK VALUES) ─────────────────────────────
int → ±10^9
long → ±10^12
long long → ±10^18
long long x; // preferred in CP
int x = 1e4 // 10^4
// ── OVERFLOW ⚠️ ──────────────────────────────────────────────────
int a = 100000;
int b = 100000;
int c = a * b; // overflow 10^10
// Fix:
long long c = (long long)a * b;
int mx = INT_MAX;
cout << mx + 1; // overflow
// ── PRECISION ────────────────────────────────────────────────────
double ans = (double)a / b;
cout << 5 / 2; // 2
cout << 5.0 / 2; // 2.5
// ── MODULAR ARITHMETIC ───────────────────────────────────────────
const int MOD = 1e9 + 7; // used in cp -> Why? 1. Large enough 2. It's Prime -> don't loose information
// Addition
(a + b) % MOD
((a % MOD) + (b % MOD)) % MOD
// Multiplication
(a * b) % MOD
((a % MOD) * (b % MOD)) % MOD
// Subtraction
(a - b) % MOD
((a % MOD) - (b % MOD) + MOD) % MOD