Informatică, întrebare adresată de Istefan, 9 ani în urmă

Cerinţa
Se citește un număr b, reprezentând o bază de numerație și apoi n numere naturale, reprezentând cifrele unui număr scris în baza b. Determinați transformarea acestui număr în baza 10.

Date de intrare
Programul citește de la tastatură numerele b n, iar apoi n numere naturale, separate prin spaţii.

Date de ieşire
Programul afișează pe ecran numărul S, reprezentând valoarea cerută.

Restricţii şi precizări
2 ≤ b ≤ 9
1 ≤ n ≤ 10
cele n numere citite vor fi mai mici decât b

Exemplu
Intrare

5 6
1 0 2 2 4 1
Ieșire

3446

Răspunsuri la întrebare

Răspuns de blindseeker90
19
In general, cand transformi din baza b in baza 10, si presupunand ca ai o reprezentare in baza b de n cifre
N_{b}=a_{0}a_{1}a_{2}.....a_{n-2}a_{n-1}
Atunci formula lui transformata este:
N_{10}=a_{0}*b^{n-1}+a_{1}*b^{n-2}+a_{2}*b^{n-3}+a.....+a_{n-2}*b^{1}+a_{n-1}*b^{0}
Ca sa tii minte mai usor: indicele coeficientului+exponentul puterii bazei, trebuie sa dea intotdeauna n-1, unde n este numarul de cifre.

Hai sa aplicam acum pentru exemplul tau: b=5, n=6 si
N_{5}=102241
Atunci transformam dupa formula
N_{10}=1*5^{5}+0*5^{4}+2*5^{3}+2*5^{2}+4*5^{1}+1*5^{0}=3125+0+2*125+2*25+4*5+1=3446

Aici este codul pentru program:

#include <iostream>
#include <cmath>
using namespace std;

int main(){
    int i,b,n,rez=0;
    cin>>b>>n;
    int a[n];
    for(i=0;i<n;i++){
        cin>>a[i];
    }
    //pow(a,b) este a la puterea b
   // vezi ca puterea este la inceput mare pentru ca citim de la stanga la dreapta
   //si apoi pe masura ce i creste, exponentul scade pana la i=n-1 cand devine 0
    for(i=0;i<n;i++){
        rez+=a[i]*pow(b,n-1-i);
    }
    cout<<rez;
   
   










AntiEaglesDavids: #include <iostream>
using namespace std;
int main()
{
int n, b, x, sol = 0;
cin >> b >> n;
for(int i=1; i<=n; i++) { cin >> x; sol += x; sol *= b; }
cout << (sol /= b);
}
Alte întrebări interesante