The task is to:
- “Write a function/procedure/subroutine that is called with an integer value and returns the middle three digits of the integer if possible or a clear indication of an error if this is not possible.”
- Note: The order of the middle digits should be preserved.
Your function should be tested with the following values; the first line should return valid answers, those of the second line should return clear indications of an error:
123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345 1, 2, -1, -10, 2002, -2002, 0
#include <iostream> std::string middleThreeDigits(int n) { auto number = std::to_string(std::abs(n)); auto length = number.size(); if (length < 3) { return "less than three digits"; } else if (length % 2 == 0) { return "even number of digits"; } else { return number.substr(length / 2 - 1, 3); } } int main() { auto values {123, 12345, 1234567, 987654321, 10001, -10001, -123, -100, 100, -12345, 1, 2, -1, -10, 2002, -2002, 0}; for (auto&& v : values) { std::cout << "middleThreeDigits(" << v << "): " << middleThreeDigits(v) << "\n"; } }
- Output:
middleThreeDigits(123): 123 middleThreeDigits(12345): 234 middleThreeDigits(1234567): 345 middleThreeDigits(987654321): 654 middleThreeDigits(10001): 000 middleThreeDigits(-10001): 000 middleThreeDigits(-123): 123 middleThreeDigits(-100): 100 middleThreeDigits(100): 100 middleThreeDigits(-12345): 234 middleThreeDigits(1): less than three digits middleThreeDigits(2): less than three digits middleThreeDigits(-1): less than three digits middleThreeDigits(-10): less than three digits middleThreeDigits(2002): even number of digits middleThreeDigits(-2002): even number of digits middleThreeDigits(0): less than three digits
Content is available under GNU Free Documentation License 1.2.