Arithmetic operators - Time & Space Complexity
We want to see how the time to run arithmetic operations changes as we do more of them.
How does the number of calculations affect the total time?
Analyze the time complexity of the following code snippet.
int sum = 0;
for (int i = 0; i < n; i++) {
sum = sum + i;
}
return sum;
This code adds numbers from 0 up to n-1 using a loop.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Addition inside the loop
- How many times: Exactly n times, once per loop cycle
As n grows, the number of additions grows the same way.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 additions |
| 100 | 100 additions |
| 1000 | 1000 additions |
Pattern observation: The work grows directly with n, so doubling n doubles the work.
Time Complexity: O(n)
This means the time to finish grows in a straight line as the input size grows.
[X] Wrong: "Arithmetic operations inside a loop take constant time no matter how many times they run."
[OK] Correct: Each operation takes a small fixed time, but doing many operations adds up, so total time grows with the number of operations.
Understanding how simple arithmetic inside loops affects time helps you explain how programs scale and run efficiently.
"What if we replaced the addition with a multiplication inside the loop? How would the time complexity change?"
Practice
Solution
Step 1: Understand the modulus operator
The modulus operator (%) returns the remainder after division of two integers.Step 2: Compare with other operators
Division (/) returns the quotient, multiplication (*) multiplies, subtraction (-) subtracts.Final Answer:
The modulus operator (%) -> Option CQuick Check:
Remainder = % operator [OK]
- Confusing division (/) with modulus (%)
- Thinking multiplication (*) gives remainder
- Using subtraction (-) for remainder
Solution
Step 1: Recall multiplication operator in C
The multiplication operator in C is the asterisk symbol (*).Step 2: Check each option
a * b; uses '*', which is correct. Options B, C, D use invalid symbols for multiplication.Final Answer:
a * b; -> Option BQuick Check:
Multiply with * operator [OK]
- Using 'x' instead of '*' for multiplication
- Using '.' or '&' mistakenly
- Missing semicolon at end
int a = 7, b = 3;
printf("%d", a / b);Solution
Step 1: Understand integer division in C
Both a and b are integers, so a / b performs integer division, which discards the decimal part.Step 2: Calculate 7 / 3 using integer division
7 divided by 3 is 2.333..., but integer division returns 2.Final Answer:
2 -> Option DQuick Check:
Integer division truncates decimals [OK]
- Expecting floating-point result
- Confusing remainder with division result
- Using wrong format specifier in printf
int x = 10;
int y = 3;
int z = x / y.0;
printf("%d", z);Solution
Step 1: Analyze the division expression
The expression x / y.0 uses y.0 which attempts a floating-point literal but causes invalid syntax, as x and y are integers.Step 2: Understand the syntax error
Using y.0 causes a compilation error due to invalid syntax in the integer division context.Final Answer:
Using a floating-point number in integer division -> Option AQuick Check:
Integer division must use integers only [OK]
- Thinking printf format is wrong
- Ignoring the decimal in y.0
- Assuming division by zero
Solution
Step 1: Understand integer vs floating-point division
Dividing by 2 (integer) causes integer division, losing decimals. Dividing by 2.0 (double) forces floating-point division.Step 2: Check each option for correct average calculation
float avg = (a + b) / 2; does integer division then converts to float, losing decimals. float avg = (a + b) / 2.0; divides by 2.0, giving float result. int avg = (a + b) / 2.0; stores float result in int, losing decimals. float avg = a / b + 2; is incorrect formula.Final Answer:
float avg = (a + b) / 2.0; -> Option AQuick Check:
Divide by 2.0 for float average [OK]
- Dividing by integer 2 causing integer division
- Storing float result in int variable
- Wrong formula for average
Ready to prove it?
Pass the test and this pattern moves unknown
