Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- unsigned divByTwo(unsigned i) {
- return floor(log(i)/log(2));
- }
- unsigned integerReplacement(unsigned i) {
- int num = 0;
- while (i != 1) {
- int div;
- if(i % 2 != 0) {
- num++;
- if((i-1)/pow(2,divByTwo(i-1)) <= (i+1)/pow(2,divByTwo(i+1))) {
- i -= 1;
- } else i += 1;
- }
- div = floor(log(i)/log(2));
- num += div;
- double temp = i / pow(2,div);
- if(temp > 1 && temp / 2.0 != 0) {
- ++num;
- }
- i = temp;
- }
- return num;
- }
- int main() {
- std::cout << integerReplacement(27);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement