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