Найти полусумму от введенного и обратного ему числа - C (СИ)
Формулировка задачи:
Доброго дня!
По условию задачи необходимо определить число, обратное введенному и вычислить полусумму этих чисел.
Пример:
вводим число 123 и получаем - (123+321)/2
Вроде как программу рабочую сделал, но хотел бы уточнить данный вид решения является оптимальным или можно данную задачу решить проще?
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
system ("chcp 1251");
system ("cls");
int a,b;
printf("введите число= ");
scanf("%d",&a);
int t=a,k=0;
//определяем сколько цифр введено
while (t!=0)
{
t/=10;
k++;
}
//определяем число, обратное введенному
t=a;
int c=0,n=0;
for (n=0; n<k; n++)
{
b=t%10;
t/=10;
c=b*pow(10,k-n)+c;
}
c/=10;
printf("\n обратное число= %d", c);
//вычисляем полусумму чисел
printf("\n polsum= %d", (a+c)/2);
getchar();
return 0;
}Решение задачи: «Найти полусумму от введенного и обратного ему числа»
textual
Листинг программы
int a,b;
printf("введите число= ");
scanf("%d",&a);
b=0;
for (int t=a; t; t/=10) b=b*10+t%10;
printf("\n обратное число= %d", b);
//вычисляем полусумму чисел
printf("\n polsum= %f", (a+b)/2.0);
Объяснение кода листинга программы
- Объявляются две переменные типа int -
aиb. - Пользователю предлагается ввести число, которое сохраняется в переменной
a. - Переменная
bинициализируется нулем. - В цикле for перебираются все цифры числа
a, начиная с его старшего разряда. Для каждой цифры выполняется операция умноженияbна 10 и сложения с остатком от деленияtна 10 (что дает цифру числа, взятую с обратным знаком). Результат сохраняется в переменнойb. - Выводится обратное число, сохраненное в переменной
b. - Вычисляется полусумма чисел
aиb. Для этого сначала выполняется операция сложенияaиb, а затем результат делится на 2.0 (что дает полусумму с плавающей точкой). - Выводится полусумма чисел
aиb.