Cześć, mam za zadanie sprawdzenie podzielności wprowadzanej liczby przez liczbę 11. Mam takie 2 programiki:
- Ten jest w C i działa ale tylko dla liczb do +-300, wyżej już zazwyczaj nie wskazuje prawidłowo. Co jest nie tak?
#include <stdio.h>
int parzyste(int n,int k)
{
if(n<=0)
{
return 0;
}
else
{
int d=n/10;
int ost=n-(d*10);
if((k & 0x01)==0) return ost+parzyste(n/10,++k);
return 0+parzyste(n/10,++k);
}
}
int nie_parzyste(int n,int k)
{
if(n<=0)
{
return 0;
}
else
{
int d=n/10;
int ost=n-(d*10);
if((k & 0x01)!=0)return ost+nie_parzyste(n/10,++k);
return 0+nie_parzyste(n/10,++k);
}
}
int przez_11(int n)
{
if(n<=0)return 0;
else return 1+przez_11(n/10);
}
int is_divisible_by_11(int number)
{
if(number<0)
{
number=-number;
}
int roznica=nie_parzyste(number,0)-parzyste(number,0);
if(roznica<0)roznica*=(-1);
if(roznica==0)return 1;
else return 0;
return is_divisible_by_11(roznica);
}
int main()
{
printf("podaj tekst: ");
int n;
scanf("%d",&n);
if(n<=0)
{
printf("Incorrect input\n");
return 2;
}
if(is_divisible_by_11(n)==1) printf("YES");
else printf("NO");
return 0;
}
- Ten jest w C++ i działa ok, jednak mam problem z przetłumaczeniem go na C
#include <iostream>
void sum_odd_even(int value, int& odd_sum, int& even_sum)
{
odd_sum += value - ((value / 10) * 10);
value /= 10;
if(value)
{
sum_odd_even(value, even_sum, odd_sum);
}
}
int is_divisible_by_11(int value)
{
int odd_sum = 0;
int even_sum = 0;
sum_odd_even(value, odd_sum, even_sum);
int diff = odd_sum - even_sum;
diff = (diff < 0 ? -diff: diff);
return (diff > 10 ? is_divisible_by_11(diff): !diff);
}
int main()
{
int n;
std::cin >> n;
std::cout << (std::cin ? (is_divisible_by_11(n) ? "YES": "NO") : "Incorrect input") << '\n';
}
Z góry dzięki za pomoc.