Skip to content

[Hacker Rank]: Warmup: A Very Big Sum. Solved ✅. #14

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Sep 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 55 additions & 0 deletions docs/hackerrank/warmup/a_very_big_sum.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# [A Very Big Sum](https://www.hackerrank.com/challenges/a-very-big-sum)

Difficulty: #easy
Category: #warmup

In this challenge, you are required to calculate and print the
sum of the elements in an array, keeping in mind that some of
those integers may be quite large.

## Function Description

Complete the aVeryBigSum function in the editor below.
It must return the sum of all array elements.

aVeryBigSum has the following parameter(s):

- int ar[n]: an array of integers.

## Return

- long: the sum of all array elements

## Input Format

The first line of the input consists of an integer n.
The next line contains space-separated integers contained in the array.

## Output Format

Return the integer sum of the elements in the array.

## Constraints

$ 1 <= n < 10 $ \
$ 0 <= ar[i] <= 10^10 $

## Sample Input

```text
5
1000000001 1000000002 1000000003 1000000004 1000000005
```

## Output

```text
5000000015
```

## Note

The range of the 32-bit integer is
($ -2^31 $) to ($ 2^31 - 1 $) or $ [-2147483648, 2147483647] $
When we add several integer values, the resulting sum might exceed the
above range. You might need to use long int C/C++/Java to store such sums.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include <vector>

#pragma once

namespace hackerrank::warmup {
long aVeryBigSum(const std::vector<long>& ar);
}
17 changes: 17 additions & 0 deletions src/lib/exercises/src/hackerrank/warmup/a_very_big_sum.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#include <exercises/hackerrank/warmup/a_very_big_sum.hpp>

/**
* @link Problem definition [[docs/hackerrank/warmup/a_very_big_sum.md]]
*/

#include <numeric>
#include <vector>

namespace hackerrank::warmup {

long aVeryBigSum(const std::vector<long>& ar) {
const long INIT_VALUE = 0L;
return std::accumulate(ar.begin(), ar.end(), INIT_VALUE);
}

}
26 changes: 26 additions & 0 deletions src/tests/unit/lib/hackerrank/warmup/a_very_big_sum.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
#include <catch2/catch_test_macros.hpp>

#include <exercises/hackerrank/warmup/a_very_big_sum.hpp>
#include <iostream>
#include <vector>

#include <filesystem>
#include <fstream>
#include <nlohmann/json.hpp>
using json = nlohmann::json;

TEST_CASE("aVeryBigSum JSON Test Cases", "[warmup]")
{
std::filesystem::path cwd = std::filesystem::current_path();
std::string path = cwd.string() + "/unit/lib/hackerrank/warmup/a_very_big_sum.testcases.json";

INFO("aVeryBigSum JSON test cases FILE: " << path);

std::ifstream f(path);
json data = json::parse(f);

for (auto testcase : data) {
long result = hackerrank::warmup::aVeryBigSum(testcase["input"]);
CHECK(result == testcase["expected"]);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
[
{
"input": [1000000001, 1000000002, 1000000003, 1000000004, 1000000005],
"expected": 5000000015
}
]