Напишите наиболее короткие вычисления выражений: x^45, x^21, x^17, x^11 в выражениях можно использовать лишь сложение, вычитание, умножение. не использовать power, через sqr
Пример полной программы, реализующей такой алгоритм
// PascalABC.NET 3.3, сборка 1611 от 06.01.2018 // Внимание! Если программа не работает, обновите версию!
function Dec2Bin(x:integer):string; begin var t:=x; var r:string:=''; while t>=2 do (r,t):=(t mod 2+r,t shr 1); Result:=t+r end;
function Pow(x:real;n:integer):real; // Быстрое возведение в степень "слева направо" begin var m:=Dec2Bin(n); Result:=x; for var i:=2 to m.Length do begin Result:=Sqr(Result); if m[i]='1' then Result*=x end end;
begin var x:=ReadReal('Укажите основание х:'); var n:=ReadInteger('Укажите степень n:'); Writeln(x,'^',n,' = ',Pow(x,n)) end.
1) uses crt; var a:array [1..15] of integer; i,k:integer; begin randomize; k:=0; for i:=1 to 15 do begin a[i]:=random(10)-3; if (a[i]<0) then inc(k); write (a[i],' '); end; writeln; writeln (k/15*100,'%'); end.
2) uses crt; var a:array [1..20] of integer; i:integer; begin randomize; for i:=1 to 20 do begin a[i]:=random(30); write (a[i],' '); end; writeln; for i:=1 to 20 do if (a[i] mod 10 = 3) then write (a[i],' '); end.
3) uses crt; var a:array [1..20] of integer; i:integer; k:longint; begin randomize; k:=1; for i:=1 to 20 do begin a[i]:=random(30); write (a[i],' '); if (a[i]>9) and (a[i]<100) then k:=k*a[i]; end; writeln; writeln (k); end.
4) uses crt; var a:array [1..30] of integer; i:integer; flag:boolean; begin randomize; for i:=1 to 30 do begin a[i]:=random(30); write (a[i],' '); end; writeln; flag:=true; for i:=1 to 29 do if (a[i]>a[i+1]) then begin flag:=false; break; end; writeln (flag); end.
int main() { int A[15] = {1,2,3,-1,-2,-3,1,2,-1,-2,1,2,3,4,5}; int k = 0; for (int i=0; i<15; i++) k+=(A[i]<0) ? 1:0; std::cout <<(k/15*100) <<'\n'; return 0; }
2) #include <iostream>
int main() { int A[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,33,20}; for (int i=0; i<20; i++) if (A[i]%10==3) std::cout <<A[i] <<std::endl; return 0; }
3) #include <iostream>
int main() { int A[13] = {1,2,3,4,5,6,7,8,9,10,11,12,13}; usnigned int p = 1; for (int i=0; i<13; i++) p*=(A[i]>9 && A[i]<100) ? A[i]:1; std::cout <<p <<'\n'; return 0; }
4) #include <iostream>
int main() { int A[30] = {1,2,3,4,5,6,7,8,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, 23 24 25 26,27,28,29,28}; bool flag = true; for (int i=0; i<29; i++) if (a[i]>a[i+1]) { flag = false; break; } std::cout <<std::boolalpha <<flag <<std::endl; return 0; }
r:=Sqr(Sqr(Sqr(Sqr(x))*x))*x; // 21
r:=Sqr(Sqr(Sqr(Sqr(x*x; // 17
r:=Sqr(Sqr(Sqr(x))*x)*x; // 11
Пример полной программы, реализующей такой алгоритм
// PascalABC.NET 3.3, сборка 1611 от 06.01.2018
// Внимание! Если программа не работает, обновите версию!
function Dec2Bin(x:integer):string;
begin
var t:=x;
var r:string:='';
while t>=2 do (r,t):=(t mod 2+r,t shr 1);
Result:=t+r
end;
function Pow(x:real;n:integer):real;
// Быстрое возведение в степень "слева направо"
begin
var m:=Dec2Bin(n);
Result:=x;
for var i:=2 to m.Length do begin
Result:=Sqr(Result);
if m[i]='1' then Result*=x
end
end;
begin
var x:=ReadReal('Укажите основание х:');
var n:=ReadInteger('Укажите степень n:');
Writeln(x,'^',n,' = ',Pow(x,n))
end.
Примеры
Укажите основание х: 0.918
Укажите степень n: 39
0.918^39 = 0.0355520433528712
Укажите основание х: -2
Укажите степень n: 15
-2^15 = -32768
Укажите основание х: 12.6
Укажите степень n: 23
12.6^23 = 2.03480378921486E+25