<?php
// قية الرقم المراد قسمتة
$NUM="2055";
$START_NUM="0";
$NUM_temp="0";
// المقسوم عليه
$div_num="5";
$div_num_temp=$div_num;
/* 
 * بإختصار تقوم تلك الحلقة بمضاعفة الرقم المقسوم علية وحفظ القيمة قبل المضاعفة فإن كان قيمة الرقم المضاعف
 * أكبر من قيمة الرقم المراد قسمتة يتم إعادة القيمة المخزنة قبل المضاعفة وزيادة قيمة الرقم المقسوم عليها والبدأ فى المضاعفة مرة أخرى وهكذا 
 * إلى أن تقل القيمة المضافة إلى أن تصل إلى ضعف العدد المقسوم علية أو زيادة العدد المقسوم نفسة
 * وفى هذه الحالة إما أن يكون العدد مساوى للعدد المقسوم وبالتالى فهو يقبل القسمة على العدد المقسوم علية وإلا فهو لا يقبل القسمة
 * */
while(true)
{
	$GEL=GELthan(sum_Func($START_NUM,$div_num_temp),$NUM);
	//echo "GELthan(sum_Func($START_NUM,$div_num_temp),$NUM)"."<br>";
	//echo sum_Func($START_NUM,$div_num_temp)."<br>";
	//echo $GEL;
	if($GEL==0||$GEL==1)
	{
		if(equal_Fun($div_num_temp,sum_Func($div_num,$div_num)))
		{
			if(equal_Fun(sum_Func($START_NUM,$div_num),$NUM)==true || equal_Fun(sum_Func(sum_Func($START_NUM,$div_num),$div_num),$NUM)==true)
			{
				echo "<h1>yes</h1>";
			}
			else
			{
				echo "<h1>No</h1>";
			}
			break;
		}
		$START_NUM=sum_Func($START_NUM,$temp);
		$div_num_temp=$div_num;
	}
	$temp=$div_num_temp;
	$div_num_temp=sum_Func($div_num_temp,$div_num_temp);
	//echo "<h1>$div_num_temp</h1>";
}

// دالة إختبار تساوى رقمين
function equal_Fun($var1,$var2)
{
	// طول السلسة
	$var1Len=strlen($var1);
	$var2Len=strlen($var2);
	// شرط تساوى السلسة
	if($var1Len==$var2Len)
	{
		// حلقة المرور على كل عناصر السلسة
		for($i=0;$i<$var1Len;$i++)
			if($var1[$i]!=$var2[$i]) return false;
	}
	else return false;
	return true;
	// فى حالة إختلاف طول السلسة يعود بالقيمة خطأ وفى حالة تساوى السلسلتين وتساوى قيمهم تعود بالقيمة الصحيحة 
}

/* دالة تعود بالقيمة 0 فى حالة تساوى السلسلتين وتعود بالقيمة 1 إذا كان المتغير الأول أكبر من الثانى وتعود بالقيمة -1 
إذا كانت قيمة المتغير الأول أضغر من قيمة المتغير الثانى */
function GELthan($var1,$var2){
	if(equal_Fun($var1,$var2)) return 0;
	$var1Len=strlen($var1);
	$var2Len=strlen($var2);
	if($var1Len==$var2Len){
		for($i=0;$i<$var1Len;$i++)
			if($var1[$i]>$var2[$i]) return 1;
			else if($var1[$i]<$var2[$i]) return -1;
	}else if($var1Len>$var2Len)
		return 1;
	else
		return -1;
}

// دالة جمع رقمين وتم شرحها من قبل فى المشاركات السابقة
function sum_Func($var1,$var2)
{
	$var1_Len=strlen($var1);
	$var2_Len=strlen($var2);
	if($var1_Len<$var2_Len){
		$temp=$var1_Len;
		$var1_Len=$var2_Len;
		$var2_Len=$temp;
		$temp2=$var1;
		$var1=$var2;
		$var2=$temp2;
	}
	//echo $var1_Len."<br>";
	//echo $var2_Len."<br>";
	$var1_Len2=$var1_Len;
	$reValueX="";
	$caryVar=0;
	for($i=$var2_Len-1;$i>=0;$i--)
	{
		$var1_Len2--;
		if(((int)$var1[$var1_Len2]+(int)$var2[$i]+$caryVar)<10){
			$reValueX.=((int)$var1[$var1_Len2]+(int)$var2[$i]+$caryVar);
			$caryVar=0;
		}else if(((int)$var1[$var1_Len2]+(int)$var2[$i]+$caryVar)==10){
			$reValueX.="0";
			$caryVar=1;
		}else{
			$reValueX.=((int)$var1[$var1_Len2]+(int)$var2[$i]+$caryVar)%10;
			$caryVar=1;
		}
	}
	if($var1_Len==$var2_Len){
		if($caryVar==1) {$reValueX.="1";$var1_Len++;}
	}else{
		while($var1_Len2!=0)
		{
			$var1_Len2--;
			if(((int)$var1[$var1_Len2]+$caryVar)<10){
				$reValueX.=(int)$var1[$var1_Len2]+$caryVar;
				$caryVar=0;
			}else if(((int)$var1[$var1_Len2]+$caryVar)==10){
				$reValueX.="0";
				$caryVar=1;
			}else{
			
			}
		}
		if($caryVar==1) {$reValueX.="1";$var1_Len++;}
	}
	$reValue="";
	for($i=$var1_Len-1;$i>=0;$i--)
		$reValue.=$reValueX[$i];
	return $reValue;
}

?>
