Cod sursa(job #2646806)

Utilizator fredtuxFlorin Dinu fredtux Data 2 septembrie 2020 00:44:04
Problema Ridicare la putere in timp logaritmic Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.52 kb
#include<fstream>

using namespace std;

int exp_by_squaring(int x, int exp);

int main(){
    ifstream fin ("lgput.in");
    ofstream fout ("lgput.out");

    int x, exp;
    fin>>x>>exp;

    fout<<exp_by_squaring(x, exp);

    return 0;
}

int exp_by_squaring(int x, int exp){
    if(exp < 0) return exp_by_squaring(1/x, -exp);

    if(exp == 0) return 1;
    if(exp == 1) return x;

    if(exp % 2 == 0){
        return exp_by_squaring(x*x, exp / 2);
    } else {
        return x * exp_by_squaring(x*x, (exp - 1)/2);
    }
}