CCCPaste

NCTU LAB 24/9 NUM 4 [Lambda's]

#include 
#include

using namespace std;

long long Factorial(int a){
    if(a == 1) return 1;
    else return a * Factorial(a-1);
}

long long Prime(int a){
    if(a == 1)return 0;
    for(int i = 2;i<=sqrt(a);i++){
        if(a%i == 0) return 0;
    }
    return 1;
}

long long OddEven(int a){
    return (a%2 == 0)?1:0;
}

long long Operate(int a, long long (*fp)(int)){
    return (*fp)(a);
}

int main()
{
    int op,in;
    bool flag=true;
    cout << "Function Pointer" <> op;
        if(op == 4){
            break;
        }else{
            cin >> in;
            switch(op){
                case 1:
                    cout << Operate(in,Factorial) << endl;
                    break;
                case 2:
                    if(Operate(in,Prime) == 0) cout << "Not Prime" <> op;
        if(op == 4){
            return 0;
        }else{
            cin >> in;
            switch(op){
                case 1:{
                	auto fact = [in](){
                		int res = 1;
                		for(int i=2; i<=in; i++){
                			res*=i;
						}
						return res;
					};
					cout << "Result : " << fact() << endl;
                    break;
                }
                case 2:{
                	auto prime = [in](){
					    if(in == 1)
							return 0;
					    for(int i = 2;i<=sqrt(in);i++){
					        if(in%i == 0) 
								return 0;
					    }
					    return 1;
					};
					cout << (prime() == 0 ? "Not Prime" : "Prime") << endl;
                    break;
                }
                case 3:{
                	auto even = [in](){
                		return in % 2 == 0 ? 1 : 0;
					};
					cout << (even() == 1 ? "Even" : "Odd") << endl;
                    break;
                }
            }
        }
    }while(flag);

}