int MyPower(int base, int exponent) { if(exponent==0) return 1; else if(exponent==1) return base; else if(exponent%2==1) return base*MyPower(base, exponent-1); else { double SquareRoot = MyPower(base, exponent/2); return SquareRoot*SquareRoot; } }
void binaryExpr(TknKind op) /* 이항 연산 */ { double d = 0, d2 = stk.pop(), d1 = stk.pop(); if ((op==Divi || op==Mod || op==IntDivi) && d2==0) err_exit("0으로 나누었습니다."); switch (op) { case Plus: d = d1 + d2; break; case Minus: d = d1 - d2; break; case Multi: d = d1 * d2; break; case Divi: d = d1 / d2; break; case Mod: d = (int)d1 % (int)d2; break; case IntDivi: d = (int)d1 / (int)d2; break; case Less: d = d1 < d2; break; case LessEq: d = d1 <= d2; break; case Great: d = d1 > d2; break; case GreatEq: d = d1 >= d2; break; case Equal: d = d1 == d2; break; case NotEq: d = d1 != d2; break; case And: d = d1 && d2; break; case Or: d = d1 || d2; break; case ExclusiveOr: d = (int)d1 ^ (int)d2; break; // Custom case Power: d = (double)MyPower((int)d1, (int)d2); break; // Custom case GCD: d = (double)MyGCD((int)d1, (int)d2); break; // Custom AND Push } stk.push(d); }
int main() { int x = 5, y =2; printf("%d power %d is %ld\n", x, y, MyPower(x,y)); printf("%d factorial is %ld\n", x, MyFactorial(x)); printf("%d is %0.2f%% of %d\n", y, MyPercentage(y, x), x); return 0; }
int main(void) { double MinInt = 1.0f; double MaxInt = 10000.0f; int TestNumber = 21; int msqrt = MySqrt(TestNumber, MinInt, MaxInt); int mpower = MyPower(TestNumber, 3); int mmul = MyMultiplication(TestNumber, 3); int mdiv = MyDivision(TestNumber, 4, MinInt, TestNumber); std::cout << msqrt << std::endl; std::cout << mpower << std::endl; std::cout << mmul << std::endl; std::cout << mdiv << std::endl; }