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+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=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;
}