Cześć :)
Treść zadania jest taka:
Napisz program do wyszukiwania największej liczby pierwszej w ciągu cyfr, stanowiących liczbę podaną przez użytkownika z klawiatury.
Przygotuj funkcję, która znajdzie największą liczbę pierwszą, będącą fragmentem liczby number. Funkcja powinna zwrócić znalezioną liczbę lub 0, w przypadku kiedy takiej liczby nie uda się znaleźć. Prototyp funkcji powinien wyglądać następująco:
unsigned long long find_largest_prime_number(unsigned long long number);
Napisz program, który pobierze od użytkownika liczbę a następnie, wykorzystując przygotowaną wcześniej funkcję find_largest_prime, wyświetli największą liczbę pierwszą, stanowiącą fragment wczytanej liczby. W przypadku podania błędnych danych program powinien wyświetlić komunikat Incorrect input i zakończyć działanie z kodem błędu 1.
Uwaga!
- W programie nie wolno używać słowa kluczowego char.
- W programie nie wolno używać zmiennych statycznych oraz globalnych.
- W programie nie wolno używać funkcji z biblioteki stdint oraz cstdint,
- W programie nie wolno używać tablic.
Przykładowe wejście:
Podaj liczbe:
1320
Przykładowe wyjście:
13
Rozpisałem więc kod:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
unsigned long long is_prime(unsigned long long a);
unsigned long long find_largest_prime_number(unsigned long long number);
int main()
{
unsigned long long zmienna1;
unsigned long long wynik;
printf("Podaj swoja liczbe: ");
if(scanf("%llu",&zmienna1)!=1)
{
printf("Incorrect input");
return 1;
}
wynik=find_largest_prime_number(zmienna1);
printf("%llu",wynik);
return 0;
}
unsigned long long is_prime(unsigned long long a)
{
unsigned long long s;
int kontrola=0;
for(s=a;s>=1;s--)
{
if(a%s == 0)
{
kontrola++;
}
if(s==1 && kontrola==2)
{
return 1;
}
}
return 0;
}
unsigned long long find_largest_prime_number(unsigned long long number)
{
dalej:
if(number==0)
{
return 0;
}
else
{
if(is_prime(number)==1)
{
return number;
}
else
{
//return find_largest_prime_number(number/10);
number=number/10;
goto dalej;
}
}
return 0;
}
I wszystko by się wydawało okej. Dla 1320 znajduje 13. Na testach jednak nie przechodzi to dla takiej liczby:
70736
gdzie powinno być 73, a jest
7
Pytanie, jak mogę usprawnić swój kod, aby uwzględnić tą trójkę z przodu?