Cambi di base

Correttore online – Intermedi

È assegnato un intero n in notazione decimale.
Si deve convertire n nella notazione in base k e quindi trovare la differenza fra il prodotto e la somma delle sue cifre in questa notazione.

Per esempio, se n=239 e k=8, la rappresentazione ottale di n è 357 e la soluzione del problema è

3*5*7 – (3+5+7) = 90.

Dati di input

Il file di input contiene su una riga i due numeri interi in notazione decimale n e k separati da uno spazio con

  • 0 < n < 109+1
  • 1 < k < 11.

Dati di output

Il file contiene un unico numero, la risposta al problema.

Esempi di input/output

input.txt output.txt
75120 9 -16
324783902 9 37594

Autore/i: A.S. Stankevich, ACM ICPC Team St. Petersburg State University of Information technology, Mechanics and Optics.


/*
   www.valcon.it
   Esercizi preparatori - Intermedi
   Cambi di base
*/

#include 
#include 
using namespace std;

int main()
{
    ifstream fin ( "input.txt");
    ofstream fout("output.txt"); 

    long n;           // numero in ingresso da convertire
    int  k;           // base di arrivo
    long quoziente;   // ...
    int  resto;       // ...
    long prodotto;    // c1*c2*...
    int  somma;       // c1+c2+...
    long differenza;  // prodotto - somma

    fin >> n >> k; 

    prodotto=1;
    somma   =0; 

    while(n > 0)
    {
         quoziente = n/k;     // tutte le cifre tranne l'ultima
         resto     = n%k;     // la cifra meno significativa
         prodotto *= resto;
         somma    += resto;
         n         = quoziente; 
    }
    differenza=prodotto-somma;

    fout << differenza;
    return 0;
}

Lascia un commento