Grade 9 · Digits of a numberCitește în română
Removing the even digits
Original: Eliminarea cifrelor pare
The idea
We build a new number from the odd digits of n, keeping their order. The digits come from right to left, so every kept digit is placed in front of the ones already placed: rez = rez + digit * p, where p is 1, 10, 100, ... (it grows only when we keep a digit).
Original description (Romanian)
Construim un număr nou din cifrele impare ale lui n, păstrând ordinea lor. Cifrele vin de la dreapta la stânga, așa că fiecare cifră păstrată se pune în fața celor deja puse: rez = rez + cifra * p, unde p este 1, 10, 100, ... (crește doar când păstrăm o cifră).
- Complexity
- O(k), where k is the number of digits of n
- Grade
- Grade 9 (Clasa a IX-a)
- Chapter
- Digits of a number
Examples
Input
123456
Expected output
135
Input
2468
Expected output
0
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Eliminarea cifrelor pare
* Clasa: 9
* Capitol: Cifrele unui număr
* Descriere: Construim un număr nou din cifrele impare ale lui n, păstrând
* ordinea lor. Cifrele vin de la dreapta la stânga, așa că fiecare
* cifră păstrată se pune în fața celor deja puse: rez = rez + cifra * p,
* unde p este 1, 10, 100, ... (crește doar când păstrăm o cifră).
* Complexitate: O(k), unde k este numărul de cifre ale lui n
*
* Exemplu
* Intrare: 123456
* Ieșire: 135
*
* Exemplu
* Intrare: 2468
* Ieșire: 0
*/
#include <iostream>
using namespace std;
int main()
{
long long n, rez = 0, p = 1;
cin >> n;
while (n > 0)
{
int cifra = n % 10;
if (cifra % 2 == 1)
{
rez = rez + cifra * p;
p = p * 10;
}
n = n / 10;
}
cout << rez << '\n';
return 0;
}
Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.