#include <iostream>
#include <cmath>
#include <bitset>
// 함수 선언
void printMenu();
int getChoice();
void performOperation(int choice);
// 연산 함수 선언
int add(int a, int b);
int subtract(int a, int b);
int multiply(int a, int b);
double divide(int a, int b);
int modulo(int a, int b);
int bitwiseAND(int a, int b);
int bitwiseOR(int a, int b);
int bitwiseXOR(int a, int b);
int leftShift(int a, int b);
int rightShift(int a, int b);
bool logicalAND(bool a, bool b);
bool logicalOR(bool a, bool b);
bool logicalNOT(bool a);
int absolute(int a);
int square(int a);
int cube(int a);
void convertBase(int n);
int main() {
int choice;
do {
printMenu();
choice = getChoice();
performOperation(choice);
} while (choice != 0);
return 0;
}
// 함수 구현
void printMenu() {
std::cout << "\n다기능 계산기 메뉴:\n";
std::cout << "1. 덧셈\n2. 뺄셈\n3. 곱셈\n4. 나눗셈\n5. 나머지\n";
std::cout << "6. 비트 AND\n7. 비트 OR\n8. 비트 XOR\n";
std::cout << "9. 왼쪽 시프트\n10. 오른쪽 시프트\n";
std::cout << "11. 논리 AND\n12. 논리 OR\n13. 논리 NOT\n";
std::cout << "14. 절대값\n15. 제곱\n16. 세제곱\n";
std::cout << "17. 진수 변환\n";
std::cout << "0. 종료\n";
}
int getChoice() {
int choice;
std::cout << "선택: ";
std::cin >> choice;
return choice;
}
void performOperation(int choice) {
int a, b;
bool boolA, boolB;
switch(choice) {
case 1:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << add(a, b) << std::endl;
break;
case 2:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << subtract(a, b) << std::endl;
break;
case 3:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << multiply(a, b) << std::endl;
break;
case 4:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << divide(a, b) << std::endl;
break;
case 5:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << modulo(a, b) << std::endl;
break;
case 6:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << bitwiseAND(a, b) << std::endl;
break;
case 7:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << bitwiseOR(a, b) << std::endl;
break;
case 8:
std::cout << "두 정수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << bitwiseXOR(a, b) << std::endl;
break;
case 9:
std::cout << "정수와 시프트할 비트 수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << leftShift(a, b) << std::endl;
break;
case 10:
std::cout << "정수와 시프트할 비트 수 입력: ";
std::cin >> a >> b;
std::cout << "결과: " << rightShift(a, b) << std::endl;
break;
case 11:
std::cout << "두 불리언 값 입력 (0 또는 1): ";
std::cin >> boolA >> boolB;
std::cout << "결과: " << logicalAND(boolA, boolB) << std::endl;
break;
case 12:
std::cout << "두 불리언 값 입력 (0 또는 1): ";
std::cin >> boolA >> boolB;
std::cout << "결과: " << logicalOR(boolA, boolB) << std::endl;
break;
case 13:
std::cout << "불리언 값 입력 (0 또는 1): ";
std::cin >> boolA;
std::cout << "결과: " << logicalNOT(boolA) << std::endl;
break;
case 14:
std::cout << "정수 입력: ";
std::cin >> a;
std::cout << "결과: " << absolute(a) << std::endl;
break;
case 15:
std::cout << "정수 입력: ";
std::cin >> a;
std::cout << "결과: " << square(a) << std::endl;
break;
case 16:
std::cout << "정수 입력: ";
std::cin >> a;
std::cout << "결과: " << cube(a) << std::endl;
break;
case 17:
std::cout << "정수 입력: ";
std::cin >> a;
convertBase(a);
break;
case 0:
std::cout << "프로그램을 종료합니다.\n";
break;
default:
std::cout << "잘못된 선택입니다.\n";
}
}
// 여기에 각 연산 함수들을 구현하세요.
// 예:
int add(int a, int b) { return a + b; }
int subtract(int a, int b) { return a - b; }
// ... 나머지 함수들 구현
void convertBase(int n) {
std::cout << "2진수 : " << std::bitset<32>(n) << std::endl;
std::cout << "8진수 : " << std::oct << n << std::endl;
std::cout << "16진수 : " << std::hex << n << std::endl;
std::cout << std::dec; // 10진수 모드로 복귀
}