Given an integer N, the task is to check if N is a Rare Number.
Rare Number is a number N which is non-palindromic and N+rev(N) and N-rev(N) are both perfect squares where rev(N) is the reverse of the number N.
#!/usr/bin/env tclsh
#
# Given an integer N, the task is to check if N is a Rare Number.
#
if {$argc >= 1} {
set nvalue [lindex $argv 0]
} elseif {$argc == 0} {
puts "Please input a number."
exit
}
if {$nvalue <= 0} {
puts "Number requires > 0."
exit
}
proc reverseNumber {num} {
set rev_num 0
while {$num > 0} {
set rev_num [expr $rev_num * 10 + $num % 10]
set num [expr $num / 10]
}
return $rev_num
}
proc isPerfectSquare {x} {
if {$x <= 0 } {
return 0
}
set sr [expr round(sqrt(double($x)))]
set result [expr $sr * $sr]
if {$result==$x} {
return 1
}
return 0
}
proc isRare {nvalue} {
set rvalue [reverseNumber $nvalue]
if {$nvalue==$rvalue} {
return 0
}
set addvalue [expr $nvalue + $rvalue]
set subvalue [expr $nvalue - $rvalue]
if {[isPerfectSquare $addvalue] && [isPerfectSquare $subvalue]} {
return 1;
}
return 0;
}
if {[isRare $nvalue]==1} {
puts "Yes"
} else {
puts "No"
}
沒有留言:
張貼留言