Jump to content
NosferatuPT

Programa muito básico em C

Recommended Posts

NosferatuPT

Boas!

Gostaria que me ajudassem a fazer um programa onde se peça um inteiro e calcule a soma dos seus dígitos.

Eu sei fazer programas um pouco mais básicos que este, do tipo pedir 2 inteiros e somá-los... agora, não consigo compreender como fazer para ele ler os dígitos um a um. Estou habituado a que, quando se declara um inteiro, funcione como um todo.

Share this post


Link to post
Share on other sites
Baderous

Utiliza o quociente e resto da divisão desse inteiro por 10 para obteres os seus algarismos. Se não perceberes como, experimenta fazer a conta de divisão à mão.

Share this post


Link to post
Share on other sites
NosferatuPT

Utiliza o quociente e resto da divisão desse inteiro por 10 para obteres os seus algarismos. Se não perceberes como, experimenta fazer a conta de divisão à mão.

Humm.. interessante. Então tenho de fazer tantas divisões quanto o número de dígitos existentes?

Share this post


Link to post
Share on other sites
NosferatuPT

Exacto. E para isso usas um ciclo em que somas o valor de cada dígito até não existam mais dígitos.

Ok. Então posso utilizar um do.. while?

Eu percebi a ideia..mas está a ser difícil executá-la.. desculpem a noobice =P Isto deve ser mesmo básico..

Estou a entrar em parafuso..

Eu percebo o conceito de divisão para obter o quociente e para obter o resto. Consigo aplicá-la se tiver 2 dígitos. Mas com mais, terei de fazer um ciclo. Podes dar-me uma pista sobre como o fazer?

EDIT: Eu estive a pensar.. dentro do while devo ter de fazer qlquer coisa do género: como o meu objectivo é chegar ao primeiro dígito através das divisões, tenho de limitar a divisão até à gama desse dígito. Será entre 0 e 9, certo?

Mas mesmo assim está a ser complicado escrever..

Share this post


Link to post
Share on other sites
Wasted

Basta usares um ciclo, vais dividindo até até a divisão ser zero. Imagina 125:

125/10 = 12,5 apanhas o 5 e guardas.

12/10 = 1.2 apanhas o 2 e guardas

1/10 = 0.1 apanhas o 1 e guardas. Entendes? :)

Share this post


Link to post
Share on other sites
Rui Carlos

O resto da divisão inteira por 10 permite-te obter o último dígito, e a divisão inteira permite-te eliminar o último dígito do número (para que da próxima vez obtenhas o penúltimo dígito, e assim sucessivamente).

Share this post


Link to post
Share on other sites
NosferatuPT

Basta usares um ciclo, vais dividindo até até a divisão ser zero. Imagina 125:

125/10 = 12,5 apanhas o 5 e guardas.

12/10 = 1.2 apanhas o 2 e guardas

1/10 = 0.1 apanhas o 1 e guardas. Entendes? :)

Ahhh! Eu estava a ficar um pouco confuso... comecei a pensar assim: Faço 125 % 10 e tenho o 5. Depois divido outra vez por 10 e já tenho o primeiro dígito.. só que agora teria de multiplicar por 10 para ter o 2º....

Eu faço uma enooorme confusão de uma coisa tão simples...

Muito obrigado :)

Share this post


Link to post
Share on other sites
Rui Carlos

Se fizeres 125%10 tens o cinco, e se depois dividires por dez ficas com 12. Ou seja, basta fazeres novamente o resto da divisão inteira por 10 para obteres o 2. Não estou a ver onde é que foste buscar a multiplicação por 10.

Já agora, outra alternativa, sem divisões (apenas com restos), é ires fazendo o resto da divisão inteira por 10, por 100, por 1000, por 10000, etc. Ou seja, começas com o divisor=10, e em cada iteração fazes divisor=divisor*10. Acho que esta solução ainda deve ser das que dá código mais simples.

Share this post


Link to post
Share on other sites
NosferatuPT

Se fizeres 125%10 tens o cinco, e se depois dividires por dez ficas com 12. Ou seja, basta fazeres novamente o resta da divisão inteira por 10 para obteres o 2. Não estou a ver onde é que foste buscar a multiplicação por 10.

Já agora, outra alternativa, sem divisões (apenas com restos), é ires fazendo o resto da divisão inteira por 10, por 100, por 1000, por 10000, etc. Ou seja, começas com o divisor=10, e em cada iteração fazes divisor=divisor*10. Acho que esta solução ainda deve ser das que dá código mais simples.

Também não sei aonde fui buscar...  :)

Muito obrigado  :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.