Soma dos dígitos de um número decimal

Publicado por Oberlan C. Romão (última atualização em 29/05/2010)

[ Hits: 13.822 ]

Homepage: http://twitter.com/oberlan

Download somadigitos.cpp




A função do programa é somar os dígitos de um número decimal, por exemplo, a soma dos dígitos de 25 é (2+5) = 7

Programa simples, mas que pode ser útil para muitas pessoas.

  



Esconder código-fonte

#include <iostream>
#include <cmath>

using namespace std;

int soma_digitos(int num){
    int soma = 0;
    if(abs(num)<10) return num;
    else return num%10 + soma_digitos(num/10);
}

int main(){
    int n;
    cin >> n;
    while(n>0){
        cout << "A soma dos digitos de " << n << " eh: " << soma_digitos(n) << endl;
        cin >> n;
    }
    return 0;
}

Scripts recomendados

Metodo de ordenação bolha

vetex2.c

Positivo ou Negativo

Calcular expressões aritméticas com 2 termos

swith


  

Comentários
[1] Comentário enviado por leandrox em 29/05/2010 - 13:36h

Apareceu o seguinte erro:


somadigitos.cpp: In function ‘int soma_digitos(int)’:
somadigitos.cpp:8: error: call of overloaded ‘abs(int&)’ is ambiguous
/usr/include/c++/4.4/cmath:94: note: candidates are: double std::abs(double)
/usr/include/c++/4.4/cmath:98: note: float std::abs(float)
/usr/include/c++/4.4/cmath:102: note: long double std::abs(long double)

[2] Comentário enviado por oberlan em 29/05/2010 - 14:10h

Bom eu testei aqui e nao deu esse problema, mas você pode remover o 'abs(num)'.
Aproveitando fiz uma versão mais completa, agora pode ser com números negativos:


#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int soma_digitos(int num){
int soma = 0;
if(num < 10) return num;
else return num%10 + soma_digitos(num/10);
}

int main(){
int n;
cin >> n;
while(n != 0){
cout << "A soma dos digitos de " << n << " eh: " << soma_digitos( abs(n) ) << endl;
cin >> n;
}
return 0;
}

[3] Comentário enviado por leandrox em 29/05/2010 - 14:17h

Legal!
Deu certo.
Vlw...

[4] Comentário enviado por oberlan em 29/05/2010 - 14:18h

Vlw por ter avisado do erro ;)
Espero ter ajudado!


Contribuir com comentário