Другие языки программирования и технологии

Программирование на Си

Вот задача. Дано трехзначное число. Найти число, полученное при прочтении справа налево. Не могу я понять как это записать (Помогите пожалуйста)
for( r = 0; n > 0; n /= 10 ) r = r * 10 + n % 10;
СГ
Сергей Гонтарев
6 852
Лучший ответ
int n;
scanf("%d",&n);

int k=0;

while (n>0) do

{

k+=n%10;

n=n/10;

}

printf(k);
Vadim Rogachev
Vadim Rogachev
83 882
#include <stdio.h>

int main() {
int n;
printf("введите трехзначное число: ");
scanf("%d", &n);
n = n % 10 * 100 + n / 10 % 10 * 10 + n / 100;
printf("число после прочтения справа налево: %d\n", n);
}
Задание может быть и в текстовом виде, то есть прочесть три символа-байта (а, b, с) и напечатать в обратном порядке. Для сборки числа в машинный вид, если это нужно, можно код символа-цифры преобразовать в число равное цифре
char a,b,c; // это целые от 0 до 255
scanf("%с%с%с", &a,&b,&c);
n = 100*(c-48) +10*(b-48) +1*(a-48);

Это решение пригодно и для отрицательных чисел, если добавить символ под минус.
Но оно непригодно, если число вычисляется в программе, а не вводится текстом.
Рассмотрим решение выше, - в нём оператором получения остатка лишь первая цифра вычисляется осмысленно, третья использует скрытое отбрасывание дробной части (это не рекомендуется, так как предполагает твердое знание языка и работы применяемых компиляторов) . А средняя цифра определяется не отдельно, а с учетом старшей цифры.
Число делится на 10, остаток отброшен, результат делится на 10 операцией %, чтобы получить младшую цифру, то есть среднюю, которая затем множится на 10.
Должно работать. Но, повторяю, что написанное понятно для человека знающего все тонкости, знающего, что происходит при каждой операции, как преобразуются неравные типы данных в процессе выполнения операций, если преобразования не указаны самим программистом.
А если знания нет, надо тестировать программу разнообразными вариантами данных.
Вопрос, что будет, если число отрицательно?
Требуется знать ещё, как работает n/10 и n%10. в этих случаях, может быть от этих операторов придётся отказаться.

Jurijus Zaksas дал решение и красивое и понятное.
Redis же использовал для краткости все средства C, но надо объявить int r, n;
)))Комменты жгут. Redis - верно, Zaksas - неверно, сумма цифр- незачет, оператор while ..do не существует; ra - как всегда, отлично, для трехзначного больше не надо)).
Меф Буслаев
Меф Буслаев
35 996