As promised, the second installment of my big number arithmetic series. This time, subtraction of two large positive integers. The procedure will give negative results if the first number is larger than the second.
Division and multiplication of large numbers are to follow.
<?php
$number_one = "999999999999999999999999999999999999999999999999999999999999999999" ;
$number_two = "999999999999999999999999999999999999999999999999999999999999999" ;
$answer = big_subtract ( $number_one , $number_two );
print $answer ;
function big_subtract ( $number_one , $number_two ) {
$answer = "" ;
$sign = "" ;
if ( strlen ( $number_one ) > strlen ( $number_two )) {
$longer_length = strlen ( $number_one );
$shorter_length = strlen ( $number_two );
$set_one = $number_one ;
$zero_number = ( $longer_length - $shorter_length );
$zero_string = "" ;
for ( $index = 1 ; $index <= $zero_number ; $index ++ ) {
$zero_string = $zero_string . "0" ;
}
$set_two = $zero_string . $number_two ;
$length = strlen ( $number_one );
$sign = "" ;
}
if ( strlen ( $number_one ) < strlen ( $number_two )) {
$longer_length = strlen ( $number_two );
$shorter_length = strlen ( $number_one );
$set_one = $number_two ;
$zero_number = ( $longer_length - $shorter_length );
$zero_string = "" ;
for ( $index = 1 ; $index <= $zero_number ; $index ++ ) {
$zero_string = $zero_string . "0" ;
}
$set_two = $zero_string . $number_one ;
$length = strlen ( $number_two );
$sign = "-" ;
}
if ( strlen ( $number_one ) == strlen ( $number_two )) {
$length = strlen ( $number_one );
$flag = 0 ;
$index = 0 ;
while (( $flag == 0 ) && ( $index <= ( $length - 1 ))) {
if ((( integer ) $number_one [ $index ]) > (( integer ) $number_two [ $index ])) {
$set_one = $number_one ;
$set_two = $number_two ;
$sign = "" ;
$flag = 1 ;
}
if ((( integer ) $number_one [ $index ]) < (( integer ) $number_two [ $index ])) {
$set_one = $number_two ;
$set_two = $number_one ;
$sign = "-" ;
$flag = 1 ;
}
if ((( integer ) $number_one [ $index ]) == (( integer ) $number_two [ $index ])) {
$index ++;
}
}
}
if ( strlen ( $number_one ) == strlen ( $number_two )) {
$flag = 0 ;
for ( $index = 0 ; $index <= ( $length - 1 ); $index ++ ) {
if ( $number_one [ $index ] != $number_two [ $index ]) {
$flag = 1 ;
}
}
if ( $flag == 0 ) {
$answer = 0 ;
return $answer ;
}
}
$carry = 0 ;
$answer = "" ;
for ( $index = ( $length - 1 ); $index >= 0 ; $index -- ) {
$digit = $carry + (( integer ) $set_one [ $index ]) - (( integer ) $set_two [ $index ]);
if ( $digit < 0 ) {
$digit = $digit + 10 ;
$carry = - 1 ;
$answer = $answer . (( string ) $digit );
}
else {
$answer = $answer . (( string ) $digit );
$carry = 0 ;
}
}
$answer = strrev ( $answer );
$flag = 0 ;
$length = strlen ( $answer );
$index = 0 ;
while (( $flag == 0 ) && ( $index <= ( $length - 1 ))) {
if ( $answer [ $index ] != "0" ) {
$flag = 1 ;
}
$index ++;
}
$begin = $index - 1 ;
$result = "" ;
for ( $index = $begin ; $index <= ( $length - 1 ); $index ++ ) {
$result = $result . $answer [ $index ];
}
$answer = $sign . $result ;
return $answer ;
}
?>
Diffusion-Limited Aggregation visualization Categories : PHP , Graphics , Algorithms , Math. Easy to use random number function that seeds with uniqid and allows a max value Categories : Math. , PHP Reverse a given number Categories : PHP , Beginner Guides , Algorithms , Math. decoct -- Decimal to octal Categories : PHP , PHP Functions , Math. Query2Report : Generating Html, Pdf and Csv Reports from SQL Query Categories : PHP , PHP , HTML , PDF , Excel Show the steps for converting a number from a given base to base 10. Shows the steps involved in converting a number from a given base to base 10. Categories : PHP , Math. , Algorithms How to judge if an integer is odd or is even in Php3? Categories : Math. , PHP , Algorithms Weighted Random - Random Scripts usually chose one out of each item, and each item have an equal chance to be chosen. But what if you want an item to be chosed more frequently than other? Categories : PHP , Math. , Arrays Calculator for Baroque Violin strings Categories : Math. , PHP , Strings Temperature Conversion Categories : PHP , Math. , Beginner Guides Greatest Common Denominator - A simple class that finds the greatest common denominator for two integers.
Categories : PHP , PHP Classes , Math. 3dLib - a class for drawing in 3D space. Supported functions: Line, SetPixel, Polygon, FilledPolygon, etc. 3dChart() function has been added for one-call drawing of 3d charts. Support of mostly used 3d-transformations. Categories : Graphics , Math. , PHP Classes , PHP , Charts and Graphs Arbitrary Precision Math using BCMATH routines Categories : PHP , Math. , BC math Library of math functions to expand the functionality of PHP3. Version 1.2.1 fixes a major problem with the gcd function.
Categories : Algorithms , PHP , Math. grab the result of any calculation you submit to the Google Calculator. Categories : PHP , Arrays , Web Services , Regexps , Math.