Консультация № 151050
19.11.2008, 11:01
0.00 руб.
0 3 2
Здраствуйте уважаемые эксперты!!!Прошу вас помогите мне решить задачку по программированию а то совсем уже сил моих нету....(
Вот такая она: из данного числа вычислить сумму его цифр.Из результата вновь вычислить сумму его цифр и т.д. сколько таких действий надо произвести, чтобы получился нуль.....
А данные никакие даны не были(
Надеюсь на вас и жду ответов...
Спасибо заранее

Обсуждение

Неизвестный
19.11.2008, 12:15
общий
это ответ
Здравствуйте, Нуруллина Светлана Азатовна!
По мойму вы немного неверно записываете задание, и вместо "вычислить сумму его цифр"
нужно "вычесть сумму его цифр", иначе нуль никогда не получится про исходном числе > 0
Программа с коментариями в приложении..



Приложение:
#include <stdio.h>
#include <conio.h>

main(){
int n, n1, k, s;

//Запрашиваем исходное число для ввода
scanf( "%d", &n );

if( n > 0 ){

//Запускаем цикл вычитания из числа суммы его чисел
k = 0;
do{
n1 = n;
s = 0;

//Сумма цифр
do{
s += n1 % 10;
n1 /= 10;
}while( n1 > 0 );

n -= s;
k ++;

//Выводим промежуточный результат
printf( "\n%d", n );

}while( n > 0 );
}//if

//Выводим кол-во действий
printf( "\nk = %d", k );
getch();
}


Неизвестный
19.11.2008, 12:19
общий
Небольшая ошибочка:
Поставил условие а обнуление переменной k не перенёс, нужно переставить действия так:

.........
scanf( "%d", &n );

k = 0;
if( n > 0 ){

do{
................
давно
Посетитель
7438
7205
19.11.2008, 12:48
общий
это ответ
Здравствуйте, Нуруллина Светлана Азатовна!
Решение в приложении.
Используется рекурсивный вызов функции fun

Приложение:
int sumnum(int iNum) //считаем сумму чисел
{
int sum = 0;
while (iNum)
{
sum += iNum % 10; //очередные цифры, как остатки от деления на 10
iNum /= 10; //убираем учтенную цифру
}
return sum;
}

void fun(int iNum, int * pRes)
{
iNum -= sumnum(iNum); //отнимем сумму цифр
(*pRes)++; //инкремент операций
if (iNum>0) //если не 0,
fun(iNum, pRes); //то повторим
}

int main()
{
int iRes = 0; //Здесь будет посчитанное число действий

fun(123456, &iRes); //123456 - примерное число, вторым параметром - адрес переменной, где получим число операций
return 0;
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа