Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Работающий вариант. Я постарался прокомментировать код, но если что непонятно будет - спрашивайте.
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion

:: Запрашиваем данные у юзера
Set /P Value=Enter a number:^> 

:: Проверка введённых данных
Echo %Value%|Findstr /R "[0-9]">Nul||(Echo Only numeric value accepted&Pause&Exit)
If %Value% LSS 0 (Echo Error: negative value&Pause&Exit)
If %Value% GEQ 2147483648 (Echo Error: out of acceptable range&Pause&Exit)

:: Считаем факториал. В связи с ограничениями арифметики в cmd, факториал считается до 16 включительно
Set Result=1
For /L %%A In (1,1,%Value%) Do (
	Set /A Result=!Result!*%%A
	If !Result! GEQ 2147483648 (Echo Error: variable overflow&Pause&Exit)
)

:: Отключаем расширенную обработку для вывода восклицательного знака
SetLocal DisableDelayedExpansion
Echo %Value%! = %Result%
Pause
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:40, 26-04-2013 | #4