Одно трёхзначное натуральное число и уменьшает каждую его цифру на 1
надо програму которая запрашивает одно трёхзначное натуральное число и уменьшает каждую его цифру на 1. Если в числе есть цифра 0, то вместо неё необходимо поставить 9. Если после преобразования в числе появятся ведущие нули, выводить их не надо. В качестве ответа выведите получившиеся число. Задачу необходимо решить без применения условного оператора.И у меня чет не виходит,вот приклад входних и виходних даних:
Sample Input 1: 123
Sample Output 1: 12
Sample Input 2: 920
Sample Output 2: 819
#include <iostream>
using namespace std;
int main() {
int a, x, y, z;
cin >> a;
x = (a / 100 - 1) % 10;
y = (a / 10 % 10 - 1) % 10;
z = (a % 10 - 1) % 10;
cout << x << y << z;
return 0;
}
Буду очень благодарен:)
Ответы (2 шт):
int a;
cin >> a;
a = (a%10+9)%10 + (a/10%10+9)%10*10 + (a/100%10+9)%10*100;
cout << a;
Устроит?
Ну, раз уж Arty решил для чисел любой длины, придется поддержать :)
unsigned int m111(unsigned int a)
{
unsigned int b = 0;
for(unsigned int i = 1;a;a/=10,i*=10)
b = b+(a%10+9)%10*i;
return b;
}
Решил задачу для произвольного целого неотрицательного числа с любым числом знаков, используя строковые операции и без условных операторов. Может пригодится такой вариант, если разрешается работать со строками а не числами.
#include <iostream>
#include <string>
int main() {
std::string s;
std::cin >> s;
for (auto & c: s)
c = (9 + c - '0') % 10 + '0';
s.erase(0, (s.substr(0, s.size() - 1) + "1").find_first_not_of("0"));
std::cout << s << std::endl;
return 0;
}
Ввод 1:
120
Вывод 1:
19
Ввод 2:
7388642125908423233724581410784625211879022397248114511102998551365742
Вывод 2:
6277531014897312122613470309673514100768911286137003400091887440254631