From 9be0bd6251768a05d300f66e5ef2c48a28597418 Mon Sep 17 00:00:00 2001 From: FuryFire Date: Fri, 9 Mar 2012 12:03:47 +0100 Subject: [PATCH] Solved ProjectEuler/017: php --- ProjectEuler/017/desc.yml | 15 ++++++++ ProjectEuler/017/solve.php | 79 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 ProjectEuler/017/desc.yml create mode 100644 ProjectEuler/017/solve.php diff --git a/ProjectEuler/017/desc.yml b/ProjectEuler/017/desc.yml new file mode 100644 index 0000000..1499fe3 --- /dev/null +++ b/ProjectEuler/017/desc.yml @@ -0,0 +1,15 @@ +title: How many letters would be needed to write all the numbers in words from 1 to 1000? +url: http://projecteuler.net/problem=17 + +desc: | + 2^15 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26. + What is the sum of the digits of the number 2^1000? + +solution: Just a matter of having a correct number-to-word function + +todo: Make a clean implementation + +solutions: + solve.php: + desc: Urggh - Solve using a lib from bas@startpunt.cc and corrected a small error so 210 whould include an "and" correctly + language: php diff --git a/ProjectEuler/017/solve.php b/ProjectEuler/017/solve.php new file mode 100644 index 0000000..d0497f8 --- /dev/null +++ b/ProjectEuler/017/solve.php @@ -0,0 +1,79 @@ +2) + { + if($number[0]!=0)$string.= ' hundred '; + if($number % 100 != 0)$string.= 'and '; + } + if ($number[$i]==1) + { + if($number[$i+1]==0) $string.=$teen[$number[$i]-1]; + else + { + $string.=$teens[$number[$i+1]-1]; + $done=true; + } + } + else + { + if(!empty($teen[$number[$i]-1]))$string.=$teen[$number[$i]-1].' '; + } + } + + elseif($number[$i]!=0 && !$done) $string.=$lasts[$number[$i]-1]; + + $j--; + } + +return $string; +} + +function n2w($number,$uk=0) +{ + if(!is_string($number))$number.=""; + if(!$uk)$many=array('', ' thousand ',' million ',' billion ',' trillion '); + else $many=array('', ' thousand ',' million ',' milliard ',' billion '); + $string=''; + if(strlen($number)%3!=0) + { + $string.=n2w_hunderds(substr($number,0, strlen($number)%3 )); + $string.=$many[floor(strlen($number)/3)]; + + } + for($i=0; $i