Условие задачи
«Курс валюты Зимбабве опустился накануне до рекордно низкого уровня — $1.2$ млрд. зимбабвийских долларов за один доллар США»
(Новости от $07.06.2009$ )
В некоторой стране инфляция достигла таких размеров, что доходы граждан стали выражаться числами, количество знаков в десятичной записи которых доходит до $200$. Это сильно усложнило задачу взимания налогов.
Один из налогов на доходы составляет $1$. Напишите программу, которая по введенному числу $D$ (величине дохода гражданина) вычислит этот налог.
При этом применяются следующие правила округления:
- Если налог выражается целым числом, то он не округляется.
- Если налог выражается дробным числом, то он округляется в сторону большего целого (в пользу государства).
Входные данные
Вводится одно число $D$ (натуральное,$10^{5}⩽D<10^{200}$ ) – величина дохода гражданина.
Выходные данные
Выведите одно натуральное число – величину налога.
Тесты
Входные данные | Выходные данные |
---|---|
12345600 |
123456 |
158874554 |
1588746 |
1000001 |
10001 |
555555 |
5556 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
import java.io.BufferedReader; import java.io.InputStreamReader; class Main { public static void main (String[] args) throws java.lang.Exception { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); String s = bufferedReader.readLine().split(" ")[0]; if (s.substring(s.length() - 2, s.length() - 2 + 2).equals("00")) { System.out.print(s.substring(0, s.length() - 2)); } else { for (int i = s.length() - 3; i >= 0; --i) { if ((int)s.charAt(i) - 48 + 1 == 10) { s = s.substring(0, i) + "0" + s.substring(i + 1); if (i == 0) { System.out.print("1"); } continue; } else { s = s.substring(0, i) + (char)(s.charAt(i) + 1) + s.substring(i + 1); break; } } System.out.print(s.substring(0, s.length() - 2)); } return; } } |
Решение задачи
Так как у нас по условию $10^{200}$ нам нужно использовать
String, ибо в
long такое число не поместится. Поэтому, есть строка, каждый символ которой, это цифра. Округляем по условию, то есть если последние два символа — нули, то просто выдаем подстроку, без последних двух символов
( s.substring(0, s.length() - 2) ). В любом случае, нужно округлять вверх, для этого, к третей с конца цифре добавляем один. Если цифра была $9$, то она станет $0$, а к следующей по возрастанию цифре применим такое-же действие. Если текущая цифра последняя, то нужно добавить перед ней еще единицу.
Ссылки
Задача на сайте e-olymp
Код решения в Ideone