Grade 9 · Digits of a numberCitește în română
Doubling the odd digits
Original: Dublarea cifrelor impare
O(n)C++1736 lines1 example
The idea
Every odd digit of n appears twice in the result. We build the result from right to left with rez = rez + digit * p; an odd digit is added twice, so p grows twice.
Original description (Romanian)
Fiecare cifră impară a lui n apare de două ori în rezultat. Construim rezultatul de la dreapta la stânga cu rez = rez + cifra * p; o cifră impară se adaugă de două ori, deci p crește de două ori.
- 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
Example 1
Input
1234
Expected output
112334
The code
Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.
/*
* Titlu: Dublarea cifrelor impare
* Clasa: 9
* Capitol: Cifrele unui număr
* Descriere: Fiecare cifră impară a lui n apare de două ori în rezultat.
* Construim rezultatul de la dreapta la stânga cu rez = rez + cifra * p;
* o cifră impară se adaugă de două ori, deci p crește de două ori.
* Complexitate: O(k), unde k este numărul de cifre ale lui n
*
* Exemplu
* Intrare: 1234
* Ieșire: 112334
*/
#include <iostream>
using namespace std;
int main()
{
long long n, rez = 0, p = 1;
cin >> n;
while (n > 0)
{
int cifra = n % 10;
rez = rez + cifra * p;
p = p * 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.