diff --git a/algorithms/converting/binary_to_decimal.c b/algorithms/converting/binary_to_decimal.c index f0506f85..43e9c4bb 100644 --- a/algorithms/converting/binary_to_decimal.c +++ b/algorithms/converting/binary_to_decimal.c @@ -1,45 +1,83 @@ // Author: Murilo Ferreira #include +#include -int binaryToDecimal(int binary) { +// Method 1: Using iterative multiplication +int binaryToDecimalUsingMultiplier(int binary) { int decimal = 0; int multiplier = 1; while (binary != 0) { - decimal += (binary % 10)* multiplier; + decimal += (binary % 10) * multiplier; binary /= 10; multiplier *= 2; } return decimal; } -int main() { - int bin; - printf("Enter your binary number: "); - scanf("%d" ,&bin); - int dec = binaryToDecimal(bin); - printf("The number is: %d \n" ,dec); - return 0; +// Method 2: Using pow function +int binaryToDecimalUsingPow(long long binary) { + int decimal = 0, i = 0, remainder; + while (binary != 0) { + remainder = binary % 10; + binary /= 10; + decimal += remainder * pow(2, i); + ++i; + } + return decimal; } -// added another method -#include -#include -int convert(long long n); -int main() { - long long n; - printf("Enter a binary number: "); - scanf("%lld", &n); - printf("%lld in binary = %d in decimal", n, convert(n)); - return 0; + +void displayMenu() { + printf("\n==========================\n"); + printf("Choose a conversion method:\n"); + printf("1. Iterative multiplication\n"); + printf("2. Pow function\n"); + printf("3. Exit\n"); + printf("==========================\n\n"); } -int convert(long long n) { - int dec = 0, i = 0, rem; - while (n != 0) { - rem = n % 10; - n /= 10; - dec += rem * pow(2, i); - ++i; +int validateBinaryInput(long long binary) { + while (binary != 0) { + if (binary % 10 > 1) { + return 0; + } + binary /= 10; + } + return 1; +} + +int main() { + int choice; + long long binary; + + while (1) { + displayMenu(); + printf("Enter your choice: "); + scanf("%d", &choice); + + if (choice == 3) { + printf("Exiting program. Goodbye!\n"); + break; + } + + printf("Enter a binary number: "); + scanf("%lld", &binary); + + if (!validateBinaryInput(binary)) { + printf("Invalid binary number. Please enter a valid binary number (only 0s and 1s).\n\n"); + continue; + } + + if (choice == 1) { + printf("Using iterative multiplication: %lld in binary = %d in decimal\n", binary, binaryToDecimalUsingMultiplier((int)binary)); + } else if (choice == 2) { + printf("Using pow function: %lld in binary = %d in decimal\n", binary, binaryToDecimalUsingPow(binary)); + } else { + printf("Invalid choice. Please select 1, 2, or 3.\n"); + } + + printf("\n"); } - return dec; + + return 0; }