以字串的形式完成加法和乘法運算

2021-10-23 14:20:53 字數 1298 閱讀 9912

問題描述和思路:當運算的數字過大時,會溢位範圍,導致最後的結果出錯。

php種整型數的字長和平台有關,32 位平台下的最大值通常最大值是大約二十億,64 位平台下的最大值通常是大約 9e18。在php中,當數字超出整型範圍時,會自動將其轉換為浮點型,浮點數的字長和平台相關,通常最大值是 1.8e308 並具有 14 位十進位制數字的精度。在本題中,雖然範圍是在浮點數內的,但是精度卻不足了,所以需要用別的方法來實現大數的運算,在這裡我們可以使用字串來實現。

//用字串的形式實現數的乘法運算,是我們所熟悉的垂直乘法運算

function multiply(string $a, string $b): string

$j = 0;

for ($inxb = $lenb - 1; $inxb >= 0; --$inxb) else

$re = $mul . $re;

}if ($j > 0) $re = $j . $re;

$result = add($result, $re);

} //去除字串首的0

if($result != '0') $result = preg_replace('/^0+/','',$result);

return $result;

}//用字串的形式實現數的加法運算

function add($a, $b) else

$re = (string)$sum . $re;

}if ($j > 0) $re = (string)$j . $re;

return $re;

}

雖然功能是實現了,但是還是離大佬的水平相差甚遠呀。還是看看大佬的**學習學習吧!

function multiply(string $a, string $b): string 

}} //最後以字串的形式輸出

return implode('', array_reverse($r));

}

function multiply(string $a, string $b): string 

} //去掉字串首的無效0字元

return preg_replace('/^0+\b/', '', strrev(join($result)));

}

上面兩個大佬寫的思想是一樣的,都是垂直乘法的實現,優化點在於使用了陣列來存放每一位的運算結果,最後再拼接成字串輸出。這裡都是先反轉再運算,雖然這麼做與我們自己筆算時從低位開始算不同,但是能夠防止陣列下標越界,是種更好的辦法。

字串實現加法和乘法

include include using namespace std string add string strleft,string strright for string size type i 0 i strright.size i int carry 0 string size type ...

CStdioFile 以字串形式寫入檔案一行

cstdiofilemfile cfileexception mexcept mfile.open t d test.ini cfile modecreate cfile modenotruncate cfile modewrite,mexcept mfile.seektoend cstring s...

以字串的形式列印list中全部資料

string sid1 request.getparameter sid string 型別的變數轉int型別 int sid integer.parseint sid1 scservice scs new scservice listls scs.getbysid sid string allrs...