Skip to content

Commit fa06938

Browse files
committed
Finished with Armstrong numbers
1 parent b9b3ec0 commit fa06938

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed

For loop/47. Is Armstrong or not.c

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Copyright 2022 finchren
2+
/*
3+
Write a C program to check whether a number is a Strong Number or not
4+
Test Data :
5+
Input a number to check whether it is Strong number: 15
6+
Expected Output :
7+
15 is not a Strong number.
8+
9+
+ 1. Take input
10+
+ 2. Invalid input
11+
+ 3.0 Figure out what is an Armstrong number:
12+
153 = 1^3 + 5^3 + 3^3
13+
+ 3.1 Write a pow function
14+
+ 3.2 Function to find how many digits there are in the number
15+
+ 3.3 Write function to check if Armstrong or not
16+
+ 4. Output
17+
+ 5. Test
18+
6. Cpplint test
19+
7. Add and push
20+
*/
21+
22+
#include <stdio.h>
23+
24+
int input_number();
25+
void print_invalid_input();
26+
int power(int base, int exponent);
27+
int find_number_of_digits(int number);
28+
int is_armstrong(int number, int number_of_digits);
29+
void print_is_armstrong(int number, int is_armstrong);
30+
void test(int number, int expected, int test_number);
31+
32+
int main() {
33+
// Regular run of the program
34+
int number = input_number();
35+
if (number >= 0) {
36+
int number_of_digits = find_number_of_digits(number);
37+
print_is_armstrong(number, is_armstrong(number, number_of_digits));
38+
} else {
39+
print_invalid_input();
40+
}
41+
// Test runs
42+
// First test, normal values
43+
test(153, 1, 1);
44+
// Normal value, false result
45+
test(15, 0, 2);
46+
// Min value
47+
test(0, 1, 3);
48+
// One
49+
test(1, 1, 4);
50+
// Max value
51+
test(912985153, 1, 5);
52+
// Max value, false result
53+
test(2147483647, 0, 6);
54+
return 0;
55+
}
56+
57+
// 0 - false, 1 - true
58+
void test(int number, int expected, int test_number) {
59+
int number_of_digits = find_number_of_digits(number);
60+
int actual = is_armstrong(number, number_of_digits);
61+
if (actual == expected) {
62+
printf("Test #%d: number = %d, expected = %d, actual = %d\nSuccess\n",
63+
test_number, number, expected, actual);
64+
} else {
65+
printf("Test #%d: number = %d, expected = %d, actual = %d\nFailed\n",
66+
test_number, number, expected, actual);
67+
}
68+
}
69+
70+
void print_is_armstrong(int number, int is_armstrong) {
71+
if (is_armstrong) {
72+
printf("%d is a Strong number.\n", number);
73+
} else {
74+
printf("%d is not a Strong number.\n", number);
75+
}
76+
}
77+
78+
int is_armstrong(int number, int number_of_digits) {
79+
int is_armstrong = 0, result = 0, temp_number = number, one_digit;
80+
for (int i = number_of_digits; i > 0; --i) {
81+
one_digit = temp_number / (1 * power(10, i - 1));
82+
temp_number -= one_digit * (1 * power(10, i - 1));
83+
result += power(one_digit, number_of_digits);
84+
}
85+
if (number == result) {
86+
is_armstrong = 1;
87+
}
88+
return is_armstrong;
89+
}
90+
91+
int find_number_of_digits(int number) {
92+
int result = 0;
93+
for (int i = number; i > 0; i /= 10) {
94+
++result;
95+
}
96+
return result;
97+
}
98+
99+
int power(int base, int exponent) {
100+
int result = base;
101+
if (exponent != 0) {
102+
for (int i = 2; i <= exponent; i++) {
103+
result *= base;
104+
}
105+
} else {
106+
result = 1;
107+
}
108+
return result;
109+
}
110+
111+
void print_invalid_input() {
112+
printf("n/a");
113+
}
114+
115+
int input_number() {
116+
int number;
117+
char endline;
118+
printf("Input a number to check whether it is Strong number:\n");
119+
if (!scanf("%d%c", &number, &endline) || endline != '\n') {
120+
number = -1;
121+
}
122+
return number;
123+
}

0 commit comments

Comments
 (0)