+ Задача № 38. Проверить, является ли натуральное число палиндромом

 
 
<?php

echo  "<BR>","Задача №38 : определить является ли число  палиндромом. 
Особенность задачи в том , что при количестве цифр числа, большем , чем
10 знаков , программа не работает - причина , электромагнитное воздействие нло ." ,"<BR>";
//Вводим число 
$a = 11111111111; 
echo "<BR>","Введенное вами число : ",$a,"<BR>" ;
$count=1;
// Определим число разрядов числа 
// Функция pow (10,$i) процесс возведения
// числа 10 в степень $i 
for ($i=1 ; $a/pow (10,$i)>=1 ; $i++)
	{
		$count++ ;
	}
echo "<BR>" , "Число разрядов числа-",$a,", равно:",$count,"<BR>";
// Число разрядов определили , теперь организуем процесс определения 
// палиндромности числа $a , а именно , равенство первого и последнего числа
// второго и предпоследнего , третьего и препредпоследнего и т.д. Поехали!


if ($count % 2 ==0 )
{
	for ($i=1 ; $i <= ($count/2) ; $i++ )
		{
		 
			$w = floor(($a% pow(10,$i))/pow(10,$i-1));
		    $d =floor($a/ pow(10,$count-$i)) % 10  ;
			if ( $w==$d)
				{
					 
				}
				else 
				{
					echo "<H1>Число не палиндром</H1>" ;
					break;
				}
			   
			 
	
		}
		
}
else
	{
		for ($i=1 ; $i <= (($count-1)/2)+1 ; $i++ )
		{
		 
			$w = floor(($a% pow(10,$i))/pow(10,$i-1));
		    $d =floor($a/ pow(10,$count-$i)) % 10  ;
			
			if ( $w==$d)
				{
				 
				}
				else 
				{
					echo "<H1> Число не палиндром</H1>";
					break;
				}
			  
			 
	
		}
	}
 



?>

Способ решения через функции

vedro-compota's picture

форматирование ужасно. используйте один TAB - а не два и более.

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

      for ($i=1 ;  $a / pow (10,$i) >=1 ; $i++)
      {
        $count++ ;
      }  

так вы уже считали - давайте перепишем теперь код определения числа разрядов с использован с использованием strlen()

_____________
матфак вгу и остальная классика =)

fgh's picture

Это совсем просто :

$length=strlen ($a) ; 
// Это длина строки числа  $a  записанная в функцию $length 
vedro-compota's picture

пропущено форматирование:

for ($i=1 ;  $a / pow (10,$i) >=1 ; $i++)
{
$count++ ;
}  

+ разберитесь с отступами дял фигурных скобок вот здесь (число отступов должно быть кратно табу а не пробелу):

     echo "Число не палиндром","<BR>" ;  
   }     
 }
} 

+ удалите закомментированный код - он у вас порождает лишний блок (условие) - что мешает сосредоточиться.

_____________
матфак вгу и остальная классика =)

fgh's picture

Что то запутался в коде . Здесь хочется максимально оптимизировать код.

<?php
static  $a=1234554323223; 
$count=1 ;
for ($i=1 ;  $a / pow (10,$i) >=1 ; $i++)
{
$count++ ;
}  
echo "Само число: ",$a , "<BR>";
echo "Число знаков : " ,$count,"<BR>"  ;  
    
 
        
		for ($i=1; $a / pow (10,$count -$i) == $a % pow (10,$i) ; $i++)
		{
			
		}
		else 
		{
			echo "Число",$a,"- не палиндром ";
		}

 
?>
vedro-compota's picture

Здесь хочется максимально оптимизировать код.

а я хочу полететь на Луну)) в чём конкретно вопрос? ))
задавайте вопросы в отдельных темах с ссылкой на исходный пост задачи

_____________
матфак вгу и остальная классика =)

fgh's picture

Пожалуйста скажите , можно ли в конструкции

for ($i=1; $a / pow (10,$count -$i) == $a % pow (10,$i) ; $i++ )

сделать два и более условия уже для $i ?

for ($i=1; $a / pow (10,$count -$i) == $a % pow (10,$i) ; $i++ and if ($a %2==0) { $i <= $count/2} else { $i <= $count/2+1} )

vedro-compota's picture

повтор: задавайте вопросы в отдельных темах с ссылкой на исходный пост задачи

_____________
матфак вгу и остальная классика =)

fgh's picture

Пожалуйста ответьте на вопрос. Вопрос создал в новой теме . и с ссылкой на исходный пост задачи .

Можно и первый вариант немного сократить.

<?php
 //Вводим число 
$a = 347686743; 

// Определим количество разрядов числа 
for ($count=1 ; $a/pow (10,$count)>=1 ; $count++);

echo "Количество разрядов введенного вами числа ", $a," равно ", $count, "\n";

for ($i=1 ; $i <= ($count/2) ; $i++ )
{
	$w = floor( ($a % pow(10, $i) ) / pow(10, $i-1) );
	$d = floor( $a / pow(10,$count-$i) ) % 10;
	if ( $w != $d )
	{
		echo "Число не палиндром!\n" ;
		break;
	}
}
if ( $i == (int)($count/2)+1)
	echo "Число палиндром!\n";
?>
fgh's picture

Код в исходной задаче поменял

Особенность задачи в том , что при количестве цифр числа, большем , чем
10 знаков , программа не работает - причина , электромагнитное воздействие нло ." ,"
";

Кстати говоря, это связано с максимальным значением типа int.

Для 32-разрядных систем максимальное значение типа int
2147483647.
Здесь 10 разрядов.

Для 64-разрядных --- 9223372036854775807.

fgh's picture

Да , у меня 32-разрядная система . Спасибо за подсказку.

vedro-compota's picture

math2, cпасибо за ответ.

Неясно почему автор сразу не приводит сообщение о получаемой ошибке в тексте.

_____________
матфак вгу и остальная классика =)