В целом неплохо, оптимизировать тут нечего, ибо программа тривиальная и работает так быстро как это только возможно.
По коду есть комментарии:
1)
if ((valVAT == 10) || (valVAT == 18) || (valVAT == 20)) {
...
Тут у вас один большой мега-if в котором что-то делается. Гораздо проще для понимания и визуально читабельнее, если делать "ранний выход". Вместо
if(a) { много кода }
стоит писать:
if (!a) {
continue; // или return; если это в функции.
}
// много кода.
У вас стоит сначала проверить, что
valVAT == 0
и выйти из цикла через break в этом случае. Потом проверить, что
valVat != 10 && valVAT != 18 && valVAT != 20
и вывести сообщение об ошибке и сделать continue. Дальше уже идет тело цикла с вычислениями.
2) Вместо
if(chng == 1) {} else if (chng == 2) {}...
стоит использовать конструкцию
switch (chng) {
case 0:
// код
break;
case 1:
// код
break;
case 2:
// код
break;
default:
// сообщение об ошибке
continue;
}
3)
sleep(1)
после вывода сообщения об ошибке, на мой взгляд не нужен. Зачем это? Заставить пользователя прочитать сообщение об ошибке?