Witam po długiej nieobecności :)
Od pewnego czasu rozwiązuję różne zadania z SPOJ. Niestety, mam problem z dwoma zadaniami. Pomimo tego, że programy zwracają prawidłowy wynik, sędzia zwraca "błędna odpowiedź". W czym może tkwić problem? Proszę o pomoc.
Liczby pierwsze (wiem, że mogłem zastosować jakiś lepszy algorytm) - link:
#include <iostream>
#include <string>
int main()
{
int number;
bool is_input_right=false;
//int t=1;
std::string check;
while(!is_input_right)
{
std::cin>>check;
for(int i=0; i<static_cast<int>(check.size()); ++i)
{
if(!isdigit(check[i]))
{
is_input_right=false;
break;
}
else
{
is_input_right=true;
}
}
if(!is_input_right) continue;
else number=std::stoi(check);
if(number<=1)
{
is_input_right=false;
}
else
{
is_input_right=true;
}
}
check.clear();
for(int i=2; i<number; ++i)
{
if((number%i)==0)
{
std::cout<<"NIE"<<std::endl;
exit(0);
}
}
std::cout<<"TAK"<<std::endl;
return 0;
}
Dwie cyfry silni - link:
#include <iostream>
#include <string>
class Zadanie
{
int n;
int silnia;
public:
void setN(int n);
void licz_silnie();
void cyfry();
};
void Zadanie::setN(int n)
{
this->n=n;
}
void Zadanie::licz_silnie()
{
int temp=1;
for(int i=1; i<=this->n; ++i)
{
temp*=i;
}
this->silnia=temp;
}
void Zadanie::cyfry()
{
//std::cout<<silnia<<std::endl;
std::string silnia_inna_postac=std::to_string(this->silnia);
int poz_d=static_cast<int>(silnia_inna_postac.size())-2;
int poz_j=static_cast<int>(silnia_inna_postac.size())-1;
poz_d<0 ? std::cout<<0 : std::cout<<silnia_inna_postac[poz_d];
std::cout<<" "<<silnia_inna_postac[poz_j]<<std::endl;
}
int main()
{
Zadanie z1;
bool is_right=false;
std::string input;
while(!is_right)
{
std::cin>>input;
for(int i=0; i<static_cast<int>(input.size()); ++i)
{
if(!isdigit(input[i]))
{
is_right=false;
break;
}
else
{
is_right=true;
}
}
if(!is_right)
{
continue;
}
int test=stoi(input);
if(test<1 || test>30)
{
is_right=false;
}
else
{
z1.setN(test);
}
}
input.clear();
z1.licz_silnie();
z1.cyfry();
return 0;
}