TOPIC

Respostas aceitas parecem estar erradas (?)

Felipe Ramos asked 2 years ago

Boa noite, consegui resolver o problema usando o raciocinio de um somatório de base decimal...

#include <iostream>
#include <iomanip>
#include <cmath>

long int countDigits( long int a ){
    return (long int)floor( log10(a) ) + 1;
}

int main(void){
    long int int_part, frac_part;
    while( true ){
        std::cin >> int_part >> frac_part;
        if( std::cin.eof() ){ break; }

        /* discover the number of digits that the number has */
        int digits = countDigits( int_part );

        std::cout << std::setfill(' ') << std::setw(0) << "$";

        // integer part
        for( int i = digits - 1; i >= 0; i-- ){
            /* useful calcs */
            long int base10_equivalent = pow(10, i);
            long int f_value = floor(int_part/base10_equivalent);

            /* number print */
            std::cout << f_value;
            if( i % 3 == 0 and i != 0 ) std::cout << ",";

            /* update the remainder */
            int_part -= base10_equivalent * f_value;
        }
        std::cout << ".";

        // frac part
        std::cout << std::setfill('0') << std::setw(2) << frac_part << "\n";

    }
    return 0;
}

Porém com esse tipo de solução, certas saidas imprimem o numero correto, exemplo: Para o input:

00949289
47

a saida esperada pelo URI é:

$00,949,289.47

ao invés de:

$949,289.47

Venho a me perguntar da necessidade da revisão da questão, visto que (creio eu), a forma mais correta de exibir o valor monetário é desconsiderando os

0
's da esquerda.

Remember not post solutions. Your post may be reviewed by our moderators.

  • Vitor Vilela replied 2 years ago

    O uDebug está errado aparentemente. A minha solução também remove os zero à esquerda. Irei dar flag no problema do uDebug pra eles arrumarem lá pois realmente os zeros devem ser eliminados.