Консультация № 189480
23.05.2016, 15:26
0.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты! Прошу вас помочь! Никак не могу найти ошибку в коде, что именно не так или вообще ход мысли неверен?:

/**
Дано натуральное число N. Получить новое число M, которое образуется из числа
N путём замены последней цифры на значение наибольшей цифры в записи числа N.
Пример. N=128452, M=128458
*/


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

int main()
{
system("chcp 1251");

int n,m,max=0,k;
printf("\nВведите натуральное число N: ");
scanf("%d",&n);

while (n>0)
{
k=n%10;
if (k>max)
max=k;
n=n/10;
}

if ((n%10)!=max)
{
n=m%10;
n=max-n;
m=m+n;
}
printf ("\nНовое число M= %d", m);
return 0;
}


Обсуждение

давно
Посетитель
7438
7205
31.05.2016, 12:17
общий
это ответ
Здравствуйте, dasha.com!
Где-то так...
1) Надо было сохранить старое значение числа
2) Новое число получается обнулением младшего разряда (делением и умножением на 10) и складыванием с максимальной цифрой.
На мой взгляд, проверять на совпадение максимальной цифры с младшей необязательно, хотя можно и оставить, дело вкуса...
[code h=200]
/**
Дано натуральное число N. Получить новое число M, которое образуется из числа
N путём замены последней цифры на значение наибольшей цифры в записи числа N.
Пример. N=128452, M=128458
*/


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

int main()
{
system("chcp 1251 > nul");

int n,m,max=0,k;
printf("\nВведите натуральное число N: ");
scanf("%d",&n);

m = n;

while (n>0)
{
k=n%10;
if (k>max)
max=k;
n=n/10;
}

m=(m/10)*10+max;
printf ("Новое число M = %d\n", m);
return 0;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа