fbpx

Problema #1503 – Puteri5 – Rezolvari PBInfo

de Mihai-Alexandru

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:

abc+acb+bac+bca+cab+cbaabc+acb+bac+bca+cab+cba

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

213+231+123+132+321+312=21+23+18+19+32+31=2+8+1+1+9+3=24213+231+123+132+321+312=21+23+18+19+32+31=2+8+1+1+9+3=24

Exemplul 1

puteri5.in

2 3 2

puteri5.out

1698
#include <bits/stdc++.h>
using namespace std;
ifstream cin("puteri5.in");
ofstream cout("puteri5.out");
int put(int a , int b)
{
    int p = 1;
    for(int i = 1; i <= b ; ++i)
        p *= a;
    return p;
}
int main()
{
    int n, a , b , c , v1[10001]={0}, p1=1 , v2[10001]={0}, p2=1 , v3[10001]={0}, p3=1 , v4[10001]={0}, p4=1 , v5[10001]={0}, p5=1 , v6[10001]={0}, p6=1 ;
    cin >> a >> b >> c;
    int maxi = -1 , e[100001]={0};
    v1[1]=1;
    for(int i = 1; i <= put(b , c); i++)
    {
        int t = 0;
        for(int j = 1; j <= p1; j++)
        {
            int cif = v1[j] * a + t;
            v1[j] = cif % 10;
            t = cif / 10;
        }
        while(t)
        {
            v1[++p1] = t % 10;
            t /=10;
        }
    }
    for(int i = p1 ; i >= 1; i--)
        //cout << v1[i];
        //cout << endl;
    if(p1>maxi) maxi = p1;
    v2[1]=1;
    for(int i = 1; i <= put(c , b); i++)
    {
        int t = 0;
        for(int j = 1; j <= p2; j++)
        {
            int cif = v2[j] * a + t;
            v2[j] = cif % 10;
            t = cif / 10;
        }
        while(t)
        {
            v2[++p2] = t % 10;
            t /=10;
        }
    }
    for(int i = p2 ; i >= 1; i--)
        //cout << v2[i];
         //cout << endl;
    if(p2>maxi) maxi = p2;
        v3[1]=1;
    for(int i = 1; i <= put(a , c); i++)
    {
        int t = 0;
        for(int j = 1; j <= p3; j++)
        {
            int cif = v3[j] * b + t;
            v3[j] = cif % 10;
            t = cif / 10;
        }
        while(t)
        {
            v3[++p3] = t % 10;
            t /=10;
        }
    }
    for(int i = p3 ; i >= 1; i--)
        //cout << v3[i];
         //cout << endl;
         if(p3>maxi) maxi = p3;
        v4[1]=1;
    for(int i = 1; i <= put(c , a); i++)
    {
        int t = 0;
        for(int j = 1; j <= p4; j++)
        {
            int cif = v4[j] * b + t;
            v4[j] = cif % 10;
            t = cif / 10;
        }
        while(t)
        {
            v4[++p4] = t % 10;
            t /=10;
        }
    }
    for(int i = p4 ; i >= 1; i--)
        //cout << v4[i];
         //cout << endl;
         if(p4>maxi) maxi = p4;
        v5[1]=1;
    for(int i = 1; i <= put(a , b); i++)
    {
        int t = 0;
        for(int j = 1; j <= p5; j++)
        {
            int cif = v5[j] * c + t;
            v5[j] = cif % 10;
            t = cif / 10;
        }
        while(t)
        {
            v5[++p5] = t % 10;
            t /=10;
        }
    }
    for(int i = p5 ; i >= 1; i--)
        //cout << v5[i];
         //cout << endl;
         if(p5>maxi) maxi = p5;
        v6[1]=1;
    for(int i = 1; i <= put(b , a); i++)
    {
        int t = 0;
        for(int j = 1; j <= p6; j++)
        {
            int cif = v6[j] * c + t;
            v6[j] = cif % 10;
            t = cif / 10;
        }
        while(t)
        {
            v6[++p6] = t % 10;
            t /=10;
        }
    }
    for(int i = p6 ; i >= 1; i--)
        //cout << v6[i];
    //cout << endl;
    if(p6>maxi) maxi = p6;
    //cout << maxi << endl;
    int s = 0;
    for(int i = 1 ; i <= maxi ; i++)
        {
            int c = v1[i] + v2[i] + v3[i] +v4[i] + v5[i] + v6[i] + s;
            //cout << v1[i] << " " << v2[i] << " " <<  v3[i]  << " " <<v4[i]  << " " <<  v5[i]  << " " <<v6[i] << endl;
            e[i] = c % 10;
            s = c / 10;
            //cout << c << " " << s << endl;
        }
    if(s > 0) e[++maxi]=s;
    for(int i = maxi ; i >= 1 ; i--)
            cout <<e[i];
    return 0;
}
Comentarii

S-ar putea sa iti placa