You are invited to Log in or Register a free Frihost Account!

Fire Boar
If you looked at the title and thought it referred to a function that does exactly the same as "+", you are pretty much spot on. That's exactly what I'm trying to make. Why, you ask? Because I'm not happy with the way it handles big integers, that is, converting them into standard form.

So, following is a function that can add numbers as big as you like together. It works by splitting each number into 8-digit chunks and adding them, then keeping hold of the zeroes. It's doing alright, but there are just two problems. Here is the code:

 Code: = 0; \$i--)       {          \$j = (\$array2_length - \$array1_length) + \$i;          \$out[\$j] = \$array1[\$i]+\$array2[\$j];       }    }    // Doesn't matter if they're the same - we still get the same results.    else    {       for (\$i = (\$array2_length - 1); \$i >= 0; \$i--)       {          \$j = (\$array1_length - \$array2_length) + \$i;          \$out[\$j] = \$array1[\$j]+\$array2[\$i];       }    }    // Now add them up!    \$carry = 0;    for (\$k = (count(\$out) - 1); \$k >= 0; \$k--)    {       \$addremainder = intval(\$out[\$k])+\$carry;       \$out[\$k] = strval(\$addremainder);       while (strlen(\$out[\$k]) < 8)       {          \$out[\$k] = "0".\$out[\$k];       }       if (strlen(\$out[\$k]) > 8)       {          \$carry = 1;       }       else       {          \$carry = 0;       }    }    return implode('', \$out); } ?>

That's the function. It's workable in theory, but I think I might have screwed up a little on the logic. Here's why:

Input 1: 0070011401010100010001050101
Input 2: 0116011000510050011801120115

Output: 0000000000000216021802170152015001860224

The input is the way it is for a reason - it realistically mimics the sorts of numbers I will be using the function for.

The output, as you can see, is messed up a little, but it is okay except for two things.

1) There are eight unwanted zeroes prepending the output. The other five are okay, they can stay.
2) The output is back to front. Splitting it into 8 chunks and reversing the order of chunks comes out with the correct answer.

If anyone could help, I'd really appreciate it.

Thanks.
MrBlueSky
Why don't you use PHP's arbitrary precision integer mathematical functions?