Cod sursa(job #2646806)
Utilizator | Florin 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);
}
}