求两个数高位相同的部分

比如
42443和42555,得42
74和75,得7
333222和333111,得333
750和75,得0

输入:两个数
输出:相同部分

评论 (0)链接2012-03-06 
  
<script type="text/javascript" defer="defer">
$={
temp:"",
getHigh:function(f,s){
var f=String(f);
var s=String(s);
var len=f.length<s.length?f.length:s.length;
for(var i=0;i<len;i++){
if(f.charAt(i)==s.charAt(i)) this.temp+=f.charAt(i);
else break;
}
if(this.temp)
document.write(f+"和"+s+"的相同的部分最高位为:"+this.temp+"<br />");
else
document.write(f+"和"+s+"没有相同的部分!<br />");
this.temp="";
}

}

$.getHigh(42443,42555);
$.getHigh(74,75);
$.getHigh(333222,333111);
</script>
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-03-06

给你写了个方法,很简单的,自己看吧

  
function getSome($a, $b){
if($a == $b) return $a;
if(abs($a-$b) > 100) return 0;
while($a/10 >0){
if(intval($a/10) == intval($b/10)){
return intval($a/10);
}
$a = intval($a/10);
$b = intval($b/10);
}
return 0;
}

$a = 520;
$b = 525;
echo getSome($a, $b);
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-03-06

$a=750;
$b=75;
if(strlen($a)==strlen($b)){
$c=$a-$b;
$d=1;
for($i=0;$i<strlen($c);$i++){
$d=$d*10;
}
$common=intval($a/$d);
}else{
$common=0;
}
echo $common;

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-06-17

$max = strval(max($a1,$a2));
$min = str_pad( strval(min($a1,$a2)) , strlen($max) , '0' , STR_PAD_LEFT );
//例如得到 $max = '40256' ; $min = '00211'; 然后你继续发挥下

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-03-06
  
这个也可以实现
<script>
function gets(sA,sB)
{
sA = String(sA);
sB = String(sB);

if(sA.length!=sB.length)
{
return 0;
}
var len = sA.length;
var ret = 0;
for(var i=0;i<len;i++)
{
if(sA.substr(0,i)!=sB.substr(0,i))
{
break;
}
ret = sA.substr(0,i);
}
return ret;
}

alert(gets(42443,42555));
alert(gets(74,75));
alert(gets(333222,333111));
alert(gets(750,75));
</script>
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-09-18

第一步:求出两个数的位数(设为n),如果位数不等直接判断没有相同部分;
第二步:用两个数分别除以10^n,如果商相等则输出该位,如果商为0,结束;
第三步:设置n=n-1,重复第二步,直至n=0;

该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (3)链接 • 2012-03-06
  • 0 支持
    位数不等直接判断没有相同部分?为神马? – zhupp 2012-03-06
  • 0 支持
    哦 知道了 刚看明白 – zhupp 2012-03-06
  • 0 支持
    因为是数字,位数不等高位就不算是想通了,字符串的话另说 – 郭冰 2012-08-17
  
$a = 42443;
$b = 42555;
var_dump((int)join('', array_intersect_assoc(str_split($a), str_split($b))));
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-03-06
  
class Program
{
static void Main(string[] args)
{
Console.WriteLine("num1: ");
string strNum1 = Console.ReadLine();
Console.WriteLine("num2: ");
string strNum2 = Console.ReadLine();

int length = strNum1.Length <= strNum2.Length ? strNum1.Length : strNum2.Length;
int count = 0;
for (int i = 0; i < length; i++)
{
if (strNum1[i]==strNum2[i])
{
count++;
}
else //出现不同的 跳出
{
break;
}
}
string target = strNum1.Substring(0, count);
Console.WriteLine(target);
}
}

不一定好,编码也有点累赘,但是也是解决大办法。
另一种思路:
1:判断 num1 与 num2位数是否相同 记录位数 N
1.1:如果:true(位数相同)->temp=abs(num1-num2)/10 相同位数: N-temp(位数)
2: false 位数小的num1(假设) 后面填0
2.1:(num2-num1)/10 !=0 返回上一步操作
2.2 (num2-num1)/10 == 0 相同位数 num1

如果依照 楼主的 750~75=>0 那么 2.2 => 0 否则 照旧

cnlouts
编辑于 2012-09-18
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-09-18

不是您所需,查看更多相关问题与答案

德问是一个专业的编程问答社区,请 登录注册 后再提交答案