1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
|
#include <iostream>
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();
}
|