forked from TheAlgorithms/Rust
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsum_square_difference.rs
56 lines (47 loc) · 1.04 KB
/
sum_square_difference.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use num::pow;
pub fn n_pow2_plus_n_pow2(num: f32) -> f32 {
let mut x = 1.0;
let mut y = 1.0;
let mut result = 1.0;
let mut gap = 3.0;
while y < num {
x += gap;
gap += 2.0;
y += 1.0;
result += x;
}
return result;
}
pub fn sum_n_pow2(num: f32) -> f32 {
let result = ((num / 2.0) + 0.5) * num;
return pow(result, 2);
}
pub fn solution(num: f32) -> f32 {
let r_n_pow2_plus_n_pow2 = n_pow2_plus_n_pow2(num);
let r_sum_n_pow2 = sum_n_pow2(num);
return r_sum_n_pow2 - r_n_pow2_plus_n_pow2;
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_ten() {
let res = solution(10.0);
assert_eq!(res, 2640.0);
}
#[test]
fn test_fifteen() {
let res = solution(15.0);
assert_eq!(res, 13160.0);
}
#[test]
fn test_twenty() {
let res = solution(20.0);
assert_eq!(res, 41230.0);
}
#[test]
fn test_fifty() {
let res = solution(50.0);
assert_eq!(res, 1582700.0);
}
}