Home c++ Establishment

# Establishment

Author

Date

Category

How to quickly build an integer into a whole degree, i.e. Implement a simplified function `Pow `from `& lt; CMath & GT; `?

everything is implemented by built-in means. Google per minute – Fast construction to Step Man . Disassessed detail there. Actually the code itself is:

``````int binpow (int a, int n) {
INT RES = 1;
While (N)
If (N & amp; 1) {
res * = a;
--n;
}
ELSE {
a * = a;
n & gt; & gt; = 1;
}
RETURN RES;
}
``````

for x = 2 – shift units on Y bits left.
If the base is more – use decomposition in degrees x 2 t
.
Int format requires four multiplicate pairs (3 31 = 617673396283947)
64-bit format – five.

``````int power (int x, int y) {
INT POW, RESULT;
if (x == 2) Return 1 & lt; & lt; y;
POW = X;
result = y & amp; 1? POW: 1;
POW * = POW;
Result * = y & amp; 2? POW: 1;
POW * = POW;
Result * = y & amp; 4? POW: 1;
POW * = POW;
result * = y & amp; 8? POW: 1;
POW * = POW;
Return Y & amp; 16? Result * Pow: Result;
}
``````

p.s. Programs without a cycle and with a cycle on PHP (redid there is almost nothing to say):

``````function power (\$ x, \$ y) {
if (\$ x == 2) Return 1 & lt; & lt; \$ y;
\$ POW = \$ x;
\$ result = \$ y & amp; 1? \$ POW: 1;
\$ POW * = \$ POW;
\$ result * = \$ y & amp; 2? \$ POW: 1;
\$ POW * = \$ POW;
\$ result * = \$ y & amp; 4? \$ POW: 1;
\$ POW * = \$ POW;
\$ result * = \$ y & amp; 8? \$ POW: 1;
\$ POW * = \$ POW;
Return \$ y & amp; 16? \$ Result * \$ POW: \$ Result;
}
FUNCTION BINPOW (\$ A, \$ n) {
\$ Res = (\$ n & amp; 1)? \$ A: 1;
While (\$ n) {
\$ a * = \$ a;
if (((\$ n & gt; & gt; = 1) & amp; 1) {
\$ res * = \$ a;
}
}
RETURN \$ RES;
}
PrintF ("& lt; br & gt; x =% d & amp; emsp; y =% d & amp; emsp; x ** y =% d & amp; emsp; x ** y =% d, \$ x = 2, \$ y = 15, Power (\$ x, \$ y), binpow (\$ x, \$ y));
Printf ("& lt; br & gt; x =% d & amp; emsp; y =% d & amp; emsp; x ** y =% d & amp; emsp; x ** y =% d, \$ x = 6, \$ y = 4, Power (\$ x, \$ y), binpow (\$ x, \$ y));
Printf ("& lt; br & gt; x =% d & amp; emsp; y =% d & amp; emsp; x ** y =% d & amp; emsp; x ** y =% d, \$ x = 3, \$ y = 10, Power (\$ x, \$ y), binpow (\$ x, \$ y));
PrintF ("& lt; br & gt; x =% d & amp; emsp; y =% d & amp; emsp; x ** y =% d & amp; emsp; x ** y =% d, \$ x = 5, \$ y = 5, Power (\$ x, \$ y), binpow (\$ x, \$ y));
``````

Results:

```x = 2 y = 15 x ** y = 32768 x ** y = 32768
x = 6 y = 4 x ** y = 1296 x ** y = 1296
x = 3 y = 10 x ** y = 59049 x ** y = 59049
x = 5 y = 5 x ** y = 3125 x ** y = 3125
```

I think so (checked, works), though without a fractional indicator, but with negative

``````# include & lt; iostream & gt;
#Include & lt; Cstdlib & gt;
Using Namespace STD;
INT MAIN ()
{
SETLOCALE (0, "");
int a, n;
Double FN_EXPON (INT S, Int F);
COUT & LT; & LT; "Enter the number of degree:" & lt; & lt; Endl; CIN & GT; & GT; a;
COUT & LT; & LT; "Enter the number indicator:" & lt; & lt; Endl; CIN & GT; & GT; n;
COUT & LT; & LT; "Result =" & lt; & lt; fn_expon (a, n) & lt; & lt; Endl;
Return 0;
}
Double FN_Expon (int s, int f) {
int i;
Double Res = 1;
While (s) {
if (! f) Return Res;
For (i = 1; i & lt; = ABS (F); I ++)
res * = s;
IF (F & LT; 0) {
res = 1 / res; RETURN RES;
}
RETURN RES;
}
RETURN RES;
}
``````

Why spend time searching for the correct question and then entering your answer when you can find it in a second? That's what CompuTicket is all about! Here you'll find thousands of questions and answers from hundreds of computer languages.