Дополнить до десяти: что не так с алгоритмом?
Задание состоит, собственно в этом, мои попытки прикреплены ниже, помогите, пожалуйста. В данный момент у меня просто постепенно число удаляется, не могу понять как изменить цифру, при это сохранив остальные.
Напишите функцию static int UpToTen (int n), которая по данному натуральному числу n возвращает число, полученное из n следующим образом: для каждой цифры i числа n в новом числе ставится цифра (10-i), цифра 0 остается без изменений (например, при вводе 1079 программа выводит 9031).
static void UpToTen(int n)
{
int temp = 0;
while (n > 0)
{
if (n % 10 != 0)
{
int i = n % 10;
temp = (10 - i) + (n - i);
}
n /= 10;
}
Console.WriteLine("Полученный результат = " + temp);
}
Ответы (1 шт):
Почти верно написали логику, вам только не хватило коэффициента, на который надо умножать полученную цифру. Ну и с нулями ввело вас в заблуждение, вы решили добавить условие, а можно было просто взять остаток от деления на 10.
Еще одна ошибка в том, что сигнатура метода не соответствует той, что указана в задаче, у вас void UpToTen(int n) а должно быть int UpToTen(int n). Будьте внимательны.
static int UpToTen(int n)
{
int result = 0;
int k = 1;
while (n > 0)
{
result += (10 - n % 10) % 10 * k;
n /= 10;
k *= 10;
}
return result;
}
Проверяем
static void Main(string[] args)
{
Console.WriteLine("Полученный результат = " + UpToTen(1079));
}
Вывод в консоль
Полученный результат = 9031
Бонус - решение через строки-символы
static int UpToTen(int n)
{
return int.Parse(string.Concat(n.ToString().Select(d => d == '0' ? d : (char)(10 - d + '0' + '0'))));
}
Оно медленнее и ресурсозатратнее, чем математическое, я просто решил показать, что оно существует и работает. Кстати, фрагмент (char)(10 - d + '0' + '0') можно записать как (char)(106 - d).