Одно трёхзначное натуральное число и уменьшает каждую его цифру на 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 шт):

Автор решения: Harry
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;
}
→ Ссылка
Автор решения: Arty

Решил задачу для произвольного целого неотрицательного числа с любым числом знаков, используя строковые операции и без условных операторов. Может пригодится такой вариант, если разрешается работать со строками а не числами.

Попробовать онлайн!

#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
→ Ссылка