#include using namespace std; /* Exercises: * https://github.com/triffon/ip-2021-22/blob/master/practicum/6/week5/%D0%B7%D0%B0%D0%B4%D0%B0%D1%87%D0%B8%20%D0%BF%D0%B5%D1%82%D0%B0%20%D1%81%D0%B5%D0%B4%D0%BC%D0%B8%D1%86%D0%B0.pdf */ // Задача първа: // Напишете функция, която приема малка буква и връща главна. char capitalize(char a) { if (a >= 'A' && a <= 'Z') return a; return a - 32; // 32 = 'а' - 'А' } void ex1() { char a; cin >> a; cout << capitalize(a) << endl; } // Задача втора: // Напишете функция, която приема 2 цели числа и пресмята най-големия им общ // делител. Използвайте алгоритъм на евклид. int gcd(int a, int b) { // Using Euclidean algorithm https://simple.wikipedia.org/wiki/Euclidean_algorithm#The_algorithm_as_an_enumerated_list if (a < b) { int tmp = a; a = b; b = tmp; } while (b != 0) { int r = a % b; a = b; b = r; } return a; } void ex2() { int a, b; cin >> a >> b; cout << gcd(a, b) << endl; } // Задача трета: // Използвайки задача втора, намерете най - малкото общо кратно. int lcm(int a, int b) { int numsGCD = gcd(a, b); return (a / numsGCD) * (b / numsGCD) * numsGCD; } void ex3() { int a, b; cin >> a >> b; cout << lcm(a, b) << endl; } // Задача четвърта: // Напишете функция която приема две числа n и m и връща цифрата на m та // позиция в числото n. // Пример: // Вход: 4210 3 // Изход: 4 int mthDigit(int n, int m) { for(int i = 0; i < m; i++) { n /= 10; } return n % 10; } void ex4() { int n, m; cin >> n >> m; cout << mthDigit(n, m) << endl; } // Задача пета: // Напишете функция, която приема число и връща 1 ако то има поне две повтарящи // се цифри. Функцията връща 0 в противен случай. int repeatedNums(int a) { for(int i = a % 10; a != 0; i = (a /= 10) % 10) { for (int j = a / 10; j != 0; j /= 10) { if (j % 10 == i) return 1; } } return 0; } void ex5() { int a; cin >> a; cout << repeatedNums(a) << endl; } // Задача шеста: // Напишете функция която приема цяло число n и извежда на стандартния изход // всички наредени двойки (i, j) където 1 ≤ i,j ≤ n. void printDoubles(int n) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) cout << "(" << i << ", " << j << ")" << endl; } } void ex6() { int n; cin >> n; printDoubles(n); } // Задача седма: // Напишете функция която приема променлива цяло число и чете от стандартния // вход стойности за нея, докато не бъде въведена стойност над 100. Променливата да // се декларира и изведе в main(). void cinUntilMoreThan100(int *x) { while(*x <= 100) cin >> *x; } void ex7() { // This function acts as our main int x; cinUntilMoreThan100(&x); cout << x << endl; } // Задача осма: // Да се изведат всички числа в интервала [a..b] за които сумата и произведението от // цифрите им е равно. bool hasEqualSumMult(int a) { int sum = 0, mult = 1; while (a != 0) { int digit = a % 10; sum += digit; mult *= digit; a /= 10; } return sum == mult; } void printEqualDigitSumMult(int a, int b) { for (int i = a; i <= b; i++) { if (hasEqualSumMult(i)) cout << i << endl; } } void ex8() { int a, b; cin >> a >> b; printEqualDigitSumMult(a, b); } int main() { ex8(); }