Условие задачи
«Курс валюты Зимбабве опустился накануне до рекордно низкого уровня — $1,2$ млрд. зимбабвийских долларов за один доллар США»
(Новости от $7.06.2009$)
В некоторой стране инфляция достигла таких размеров, что доходы граждан стали выражаться числами, количество знаков в десятичной записи которых доходит до $200.$ Это сильно усложнило задачу взимания налогов.
Один из налогов на доходы составляет $1%.$ Напишите программу, которая по введенному числу $D$ (величине дохода гражданина) вычислит этот налог.
При этом применяются следующие правила округления:
- Если налог выражается целым числом, то он не округляется.
- Если налог выражается дробным числом, то он округляется в сторону большего целого (в пользу государства).
Входные данные
Вводится одно число $D$ (натуральное, $10^{5} \leqslant D < 10^{200}$) – величина дохода гражданина.
Выходные данные
Выведите одно натуральное число – величину налога.
Тесты
Входные данные | Выходные данные |
[latex]12345600[/latex] | [latex]123456[/latex] |
[latex]158874554[/latex] | [latex]1588746[/latex] |
[latex]1000001[/latex] | [latex]10001[/latex] |
[latex]555555[/latex] | [latex]5556[/latex] |
[latex]525252[/latex] | [latex]5253[/latex] |
[latex]100000000[/latex] | [latex]1000000[/latex] |
Код программы(string)
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 |
#include <iostream> #include <string> using namespace std; int main() { string s; cin >> s; if (s.substr(s.size() - 2, 2) == "00") { cout << s.substr(0, s.size() - 2); } else { for (int i = s.size() - 3; i >= 0; --i) { if (int(s.at(i)) - 48 + 1 == 10) { s.at(i) = '0'; if (i == 0) { cout << "1"; } continue; } else { s.at(i)++; break; } } cout << s.substr(0, s.size() - 2); } return 0; } |
Решение задачи
Так как у нас по условию $10^{200}$ нам нужно использовать string, ибо в long int такое число не поместится. Поэтому, есть строка, каждый символ которой, это цифра. Округляем по условию, то есть если последние два символа — нули, то просто выдаем подстроку, без последних двух символов ( s.substr(0, s.size() - 2) ). В любом случае, нужно округлять вверх, для этого, к третей с конца цифре добавляем один. Если цифра была $9$, то она станет $0$, а к следующей по возрастанию цифре применим такое-же действие. Если текущая цифра последняя, то нужно добавить перед ней еще единицу.
Почти хорошо.
— Какую роль в Вашей программе играет continue?
— я бы вместо if (int(s.at(i)) - 48 + 1 == 10) написал if (s[i] - '0' == 9), но это Ваш выбор. Однако, от волшебной константы 48 нужно избавиться использовав ‘0’.