PHPは64bitでないと大きい数が扱えないらしい。PearのBigIntegerを使えばできるらしいがインストールが面倒なので簡単な1を足したり引いたりする関数。
もっと簡単な方法があるような気もするガ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
function addOne($s) { if(!$s) { $s = 0; } $s = (string)$s; if ( $s === "" ) { return (string)1; } $s0 = $s[strlen($s)-1]; if ( $s[0] == "-") { return "-" . subOne(substr($s, 1)); } if ( !is_numeric($s0)) { return $s . "0"; } $s0 = (int)$s0; if ( $s0 !== 9 ) { ++$s0; return substr($s, 0, strlen($s)-1) . (string)$s0; } else { if ( strlen($s)===1) { return "10"; } return addOne(substr($s, 0, strlen($s)-1)) . "0"; } } function subOne($s) { if(!$s) { $s = 0; } $s = (string)$s; if ( $s === "" ) { return (string)-1; } $s0 = $s[strlen($s)-1]; if ( $s[0] == "-") { return "-" . addOne(substr($s, 1)); } if ( !is_numeric($s0)) { return "-" . $s . "0"; } $s0 = (int)$s0; if ( $s0 !== 0 ) { --$s0; return substr($s, 0, strlen($s)-1) . (string)$s0; } else { if ( strlen($s)===1) { return "-1"; } $ret = subOne(substr($s, 0, strlen($s)-1)) . "9"; if ( $ret[0] === "0") { $ret = substr($ret, 1); } return $ret; } } |