Дано натуральное число n. Получить его каноническое разложение (разложение на простые множители). А вот мой код...
#include <iostream>
#include <cmath>
#include <locale>
using namespace std;
int main()
{
setlocale(0, "rus");
int n;
cin >> n;
int a(0), b(0), c(0), d(0);
if ((n % 2) == 0)
{
while ((n % 2) == 0)
{
n /= 2; ++a;
}
}
if ((n % 3) == 0)
{
while ((n % 3) == 0)
{
n /= 3; ++b;
}
}
if ((n % 5) == 0)
{
while ((n % 5) == 0)
{
n /= 5; ++c;
}
}
if ((n % 7) == 0)
{
while ((n % 7) == 0)
{
n /= 7; ++d;
}
}
if ((a != 0) || (b != 0) || (c != 0) || (d != 0))
{
cout << "Число " << n << " раскладывается на " << a << " * " << b << " * " << c << " * " << d << " * " << endl;
} // не знаю, почему n не выводится полностью
else
{
cout << n << " не раскладывается ни на 2, ни на 3, ни на 5, ни на 7 " << endl;
}
system("pause");
return 0;
}
Цикл по делителям не нужен, нужно просто последовательно перебирать делители. В программировании одинаковый код - под запретом: нужно делители записывать в массив. И ответ тоже в массив. Самое главное: ошибка разложения на делители. Вы число не делите. Правильно так : n /= 2 ;
. Нужно проверять число на равенство единицы или простому делителю и если он равен ему, то добавляется это разложение и обработка заканчивается.
Пример кода :
// g++ -Wall -Wpedantic разлож.cpp
#include <iostream>
#include <cmath>
#include <locale>
using namespace std;
# define dividersN 4
int main()
{
//setlocale(0, "rus");
int n;
cin >> n;
if(n<=0)return 1;
int dividers[dividersN]={2,3,5,7};
char const * dividerName[dividersN]={"два","три","пять","семь"};
int degree[dividersN]={0,0,0,0};
for(int dividerI=dividersN;dividerI>0;){
-- dividerI ;
TryAgain :
if(n<dividers[dividerI])continue;
if(n==dividers[dividerI]){
++ (degree[dividerI]);
n = 1 ;
break;}
if(n==1)break;
if((n%dividers[dividerI])==0){
++ (degree[dividerI]);
n /= dividers[dividerI] ;
goto TryAgain;}}
cout << "число n раскладывается = " ;
for(int dividerI=dividersN;dividerI>0;){
-- dividerI ;
if(degree[dividerI])
cout << dividerName[dividerI]<<"^"<<degree[dividerI]<<" * "; }
cout<<n<<"\n";
//system("pause");
return 0;}
; ------------Без указателей----------
...
int a(0), b(0), c(0), d(0);
if(n==0)return 1;
while ((n%2) == 0) { n /= 2; a++; }
while ((n%3) == 0) { n /= 3; b++; }
while ((n%5) == 0) { n /= 5; c++; }
while ((n%7) == 0) { n /= 7; d++; }
cout << "число n раскладывается на" ;
if(a)cout<<" два ^ "<< a << " * ";
if(b)cout<<" три ^ "<< b << " * ";
if(c)cout<<" пять ^ "<< c << " * ";
if(d)cout<<" семь ^ "<< d << " * ";
cout<< n << "\n";
...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как изменить размеры виджетов которые находятся в слое(layout), получается изменить размеры кнопок через qss(пока я что попробовал), но размеры...
Всем привет, начал разработку игры, еще мало чего создал, но после добавления отклика на столкновение почти сразу после запуска exe виндовс...
я новенький в изучении C++Что в этом коде может быть не так?
Есть API сервер со SpringBootКлиент отравляет POST-запрос c Json в теле