#include<iostream>
#include<conio.h>
#include<cmath>
using namespace std;
using std::cout;
using std::endl;
using std::cin;
using std::ios_base;
int main()
{
int a, b, r=1;
cout << "a-chislo, b-kol-vo ciklov" << endl;
if (!(cin >> a && cin >> b))
cout << "error" << endl;
else if (a < 0 && b < 0)
cout << "error" << endl;
else
for (int i = 1; i <= b; i = i + 1)
r = r*a;
cout << "result: "<<r << endl;
_getch();
return 0;
}
Возведение числа в степень с помощью цикла. Методом тыка удалось сделать рабочий код. Тык был в переменную "r" и присваивание ей значения "=1", только тогда заработало. Но так до конца и не понятна логика этого выражения r=r*a, если r=1. Почему цикл идет, только в таком случае, а не например в таком r=2*a. В противном случае сразу выводится значение первого повторения, а в оригинальном я получаю степень числа со всеми повторениями. Если написать r=b*a результат будет без повторений, а r=r*a уже с повторениями по условию for. Помогите понять Помогите понять
double power( double a, int n, int& m ) {
assert( n > 0 || ( a != 0.0 || n != 0 ) );
switch( n ) {
case 0:
return 1;
case 1:
return a;
default : {
double a2 = power( a, n / 2, m );
if( n & 1 ) {
m += 2;
return a * a2 * a2;
}
else {
m++;
return a2 * a2;
}
}
}
}
int main() {
double e, r;
int n, m;
while( true ) {
cout << "что возводить? : ";
cin >> e;
cout << "в какую степень? : ";
cin >> n;
m = 0;
r = power( e, n, m );
cout << e << "**" << n << "=" << r << ", число умножений " << m << endl;
}
return 0;
}