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"
}
 
沒有留言:
張貼留言