Поменять порядок следования цифр целого положительного числа K на обратный - C (СИ)
Формулировка задачи:
Условие:Описать функцию InvertDigits(K), меняющую порядок следования цифр целого положительного числа K на обратный (K — параметр целого типа, являющийся одновременно входным и выходным). С помощью этой процедуры поменять порядок следования цифр на обратный для каждого из пяти данных целых чисел.
Всем спасибо кто уделил время!!!
//---------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <math.h>
//---------------------------------------------------------------------------
int invertdigits(int);
int main()
{ int n1,n2,n3,n4,n5;
int new;
printf("Vvedite n1\n");
scanf("%d",&n1);
printf("Vvedite n2\n");
scanf("%d",&n2);
printf("Vvedite n3\n");
scanf("%d",&n3);
printf("Vvedite n4\n");
scanf("%d",&n4);
printf("Vvedite n5\n");
scanf("%d",&n5);
getch();
return 0;
}
int invertdigits(int k)
{int x;
x=0;
while (k)
{x=x*10+k % 10;
k/=10;
}
return x;
}
//---------------------------------------------------------------------------Решение задачи: «Поменять порядок следования цифр целого положительного числа K на обратный»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <math.h>
// гениальная функция разворота строки
void reverse_str(char *_str, int _len)
{
if(_len > 1) reverse_str((*_str ^= _str[_len - 1] ^= *_str ^= _str[_len - 1], ++_str), _len - 2);
}
size_t calculate_digits(size_t _x)
{
return (size_t)(log(_x)/log(10)) + 1; // сколько же цифр максимально может содержать unsigned int?
}
//краткое описание: число в строку->вертим строку->строку в число->все счастливы
size_t invert_digits(size_t _x)
{
char *buf;
size_t result;
buf = malloc(calculate_digits(UINT32_MAX) + 1);
sprintf(buf, "%u", _x);
reverse_str(buf, strlen(buf));
result = strtoul(buf, 0, 10);
free(buf);
return result;
}
int main()
{
size_t number;
while("MEDVED")
{
printf("Enter number or type \"0\" to exit\n");
scanf("%u", &number);
if(number)
{
number = invert_digits(number);
printf("Razvorot: %u \n", number);
}
else
break;
}
return 0;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с целочисленными значениями, строками и математическими функциями
- Определяем функцию reverse_str, которая меняет порядок символов в строке
- Создаем функцию calculate_digits, которая вычисляет максимальное количество цифр, которое может содержать unsigned int
- Создаем функцию invert_digits, которая преобразует число в строку, меняет порядок символов в строке и преобразует строку обратно в число
- В функции main считываем число с помощью scanf и вызываем функцию invert_digits для его инвертирования
- Выводим полученное число на экран
- Повторяем шаги 5-6 до тех пор, пока пользователь не введет ноль для выхода из программы