Rezolvare completă PbInfo #1503 Puteri5

Deoarece Ionel nu a înţeles bine ordinea de efectuare a operaţiilor de ridicare la putere, doamna învăţătoare îi dă o tema care să îl ajute să aprofundeze această problemă. Astfel, îi dă mai multe exerciţii de următorul tip: pentru trei cifre nenule a, b, c, el va trebui să calculeze valoarea următoarei expresii:

\( a^{b^c} + a^{c^b} + b^{a^c} + b^{c^a} + c^{a^b} + c^{b^a} \)

Cerința

Cunoscând cifrele a, b, c, determinaţi valoarea obţinută în urma efectuării calculelor de mai sus.

Date de intrare

Fișierul de intrare puteri5.in conține pe prima linie trei cifre a b c, separate prin câte un spaţiu.

Date de ieșire

Fișierul de ieșire puteri5.out va conține un număr natural ce reprezintă valoarea obţinută pentru expresia precizată anterior.

Restricții și precizări

  • 1 ≤ a,b,c ≤ 5

Exemplul 1

puteri5.in

2 1 3

puteri5.out

24

Explicație

\( 2^{1^3} + 2^{3^1} + 1^{2^3} + 1^{3^2} + 3^{2^1} + 3^{1^2} = 2^1 + 2^3 + 1^8 + 1^9 + 3^2 + 3^1 = 2 + 8 + 1 + 1 + 9 + 3 = 24 \)

Exemplul 1

puteri5.in

2 3 2

puteri5.out

1698

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema Puteri5:

#include <fstream>

using namespace std;
ifstream  fin("puteri5.in");
ofstream fout("puteri5.out");
int d[100000],s[100000],nd,ns;
int x[5];
int x_la_y(int x,int y) // calculeaza x la puterea y
{                       // x si y sunt cifre
    int p,i;
    p=1;
    for(i=1;i<=y;i++)
        p=p*x;
    return p;
}
void putere(int x,int z)  // calculeaza x la z
{               // x este cifra, z este numar natural
    int i,r,j;
    d[0]=1;nd=1;

    if(x>1)
    for(i=1;i<=z;i++)
    {
        r=0;
        for(j=0;j<nd;j++)
            {
                d[j]=d[j]*x+r;
                r=d[j]/10;
                d[j]=d[j]%10;

            }

        if(r>0)
        {
            d[nd]=r;
            nd++;
        }
    }
}

void suma(void)
{
int i,r;
for(i=0;i<nd;i++)
    s[i]=s[i]+d[i];

if(nd>ns)ns=nd;

r=0;
for(i=0;i<ns;i++)
{
    s[i]=s[i]+r;
    if(s[i]>9)
    {
        s[i]=s[i]-10;
        r=1;
    }
    else r=0;
}
if(r>0)
{
    s[ns]=r;
     ns++;
}

}

int main()
{
    int a,b,c,i,u,v,z;
    fin>>a>>b>>c;
    x[0]=a;x[1]=b;x[2]=c;x[3]=a;x[4]=b;
    ns=1;
  for(i=1;i<=3;i++)
    {
        u=x[i];v=x[i+1];
        z=x_la_y(u,v);
        putere(x[i-1],z);
        suma();

        z=x_la_y(v,u);
        putere(x[i-1],z);
        suma();
    }
    for(i=ns-1;i>=0;i--)
        fout<<s[i];

    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #1503 Puteri5

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1503 Puteri5 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!