Мой код ниже. Это код C ++.
Этот код делает общее деление на два числа.
Например, если input равен 18,24, output равен 2,2,2,3,3.
Но я хочу только 2 и 3 на выходе.
Я не могу это исправить. Как я могу это исправить? Спасибо за помощь…
#include<iostream>
using namespace std;
class Ratio {
public:
Ratio(int numerator, int denumerator) {
num=numerator;
den=denumerator;
}
void commondivisor() {
int arr[20];
int arr2[20];
int c=0;
int c2=0;
for (int q = 2; num != 1; q ++)
{
if (num % q == 0)
{
num /= q;
arr[c]=q;
q --;
c++;
}
}
cout << endl;
for (int w = 2; den != 1; w ++)
{
if (den % w == 0)
{
den /= w;
arr2[c2]=w;
w --;
c2++;
}
}
for (int i=0; i<c; i++) {
for (int j=0; j<c2; j++) {
if (arr[i]==arr2[j])
cout<<arr2[j];
}
}
}private:
int num;
int den;
};
int main() {
int a;
int b;
cin >> a;
cin >> b;
Ratio nesne(a,b);
nesne.commondivisor();
return 0;
}
Ваш алгоритм поиска факторов на самом деле не работает? Например, для чисел 18 и 24 это должно быть {1,2,3,6,9,18} и {1,2,3,4,6,8,12,24} соответственно — включая 1 и сам номер. Вы получаете {2,3,3} и {2,2,2,3} соответственно.
std::vector<int> factors(int num) {
std::vector<int> fac_vec;
for (int i = 1; i <= num; i++)
if (num % i == 0)
fac_vec.push_back(i);
return fac_vec;
}
Это работает, думал, что это ни в коем случае не эффективно. Чтобы найти общие элементы, вы можете выполнить итерацию с помощью вложенного цикла. Опять же, не очень эффективно, тем более что векторы / массивы отсортированы. Смотрите пример ниже.
std::vector<int> find_common(std::vector<int>& l, std::vector<int>& r) {
std::vector< int > common_vec;
for (auto il : l)
for (auto ir : r)
if (il == ir)
common_vec.push_back(ir);
return common_vec;
}
Других решений пока нет …