On 1 March 2016 at 19:35, Arghya Das <arghya0...@gmail.com> wrote: > $num = 1234; > $sum = 0; > > while ( $num != 0) > { > $rem = $num % 10; > $sum = ( $sum * 10 ) + $rem; > $num = $num / 10; > } > > print $sum;
I suspect you're just exceeding precision limits. Modified code: use strict; use warnings; my $num = 1234; my $sum = 0; while ( $num != 0) { my $rem = $num % 10; printf "* rem: %s, sum: %s, num: %s\n", $rem, $sum, $num; $sum = ( $sum * 10 ) + $rem; $num = $num / 10; } print $sum; Output: * rem: 4, sum: 0, num: 1234 * rem: 3, sum: 4, num: 123.4 * rem: 2, sum: 43, num: 12.34 * rem: 1, sum: 432, num: 1.234 * rem: 0, sum: 4321, num: 0.1234 * rem: 0, sum: 43210, num: 0.01234 * rem: 0, sum: 432100, num: 0.001234 * rem: 0, sum: 4321000, num: 0.0001234 * rem: 0, sum: 43210000, num: 1.234e-05 * rem: 0, sum: 432100000, num: 1.234e-06 * rem: 0, sum: 4321000000, num: 1.234e-07 * rem: 0, sum: 43210000000, num: 1.234e-08 * rem: 0, sum: 432100000000, num: 1.234e-09 * rem: 0, sum: 4321000000000, num: 1.234e-10 * rem: 0, sum: 43210000000000, num: 1.234e-11 * rem: 0, sum: 432100000000000, num: 1.234e-12 * rem: 0, sum: 4321000000000000, num: 1.234e-13 * rem: 0, sum: 43210000000000000, num: 1.234e-14 * rem: 0, sum: 432100000000000000, num: 1.234e-15 * rem: 0, sum: 4321000000000000000, num: 1.234e-16 ... * rem: 0, sum: 4.321e+306, num: 1.234e-304 * rem: 0, sum: 4.321e+307, num: 1.234e-305 * rem: 0, sum: Inf, num: 1.234e-306 * rem: 0, sum: Inf, num: 1.234e-307 * rem: 0, sum: Inf, num: 1.234e-308 * rem: 0, sum: Inf, num: 1.234e-309 * rem: 0, sum: Inf, num: 1.23399999999999e-310 * rem: 0, sum: Inf, num: 1.23399999999989e-311 * rem: 0, sum: Inf, num: 1.23399999999891e-312 * rem: 0, sum: Inf, num: 1.23399999999397e-313 * rem: 0, sum: Inf, num: 1.23400000009278e-314 * rem: 0, sum: Inf, num: 1.23400000206904e-315 * rem: 0, sum: Inf, num: 1.23399999712839e-316 * rem: 0, sum: Inf, num: 1.23400009594151e-317 * rem: 0, sum: Inf, num: 1.23399811967893e-318 * rem: 0, sum: Inf, num: 1.2339783570531e-319 * rem: 0, sum: Inf, num: 1.23417598331143e-320 * rem: 0, sum: Inf, num: 1.23516411460312e-321 * rem: 0, sum: Inf, num: 1.23516411460312e-322 * rem: 0, sum: Inf, num: 9.88131291682493e-324 If you modify the code to use arbitrary precision floating point, it just runs forever. So you possibly have a logic error. Though it depends entirely on what you're trying to achieve. If I had to guess, I'd say you expected " $num / 10 " to return an integer, not a floating point value. changing the last line of the "while" to read: $num = int ( $num / 10 ); Results in the following: * rem: 4, sum: 0, num: 1234 * rem: 3, sum: 4, num: 123 * rem: 2, sum: 43, num: 12 * rem: 1, sum: 432, num: 1 4321 -- Kent KENTNL - https://metacpan.org/author/KENTNL -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/