C語言字符串數(shù)字轉(zhuǎn)換為數(shù)字
本章不使用<stdlib.h>中提供的字符串數(shù)字轉(zhuǎn)換為數(shù)字的函數(shù)
char *itoa(int _Val, char *_DstBuf, int _Radix);//該函數(shù)是非標準庫所提供的
up主提供一種C語言字符串數(shù)字轉(zhuǎn)換為數(shù)字的思路:

如圖所示,將十位,百位單獨計算出來,然后加上個位得到完整的數(shù)字。
學過基礎(chǔ)的朋友應(yīng)該了解過ASCII字符集,在0~127的范圍內(nèi)包含了控制字符,顯示字符,其中48~58為數(shù)字字符,即0~9。轉(zhuǎn)換個位的字符數(shù)字很輕松,可是十分位、百分位、及更大的數(shù)就不好計算了。
為此,up做了很多草稿,分析他們的規(guī)律變化:

查詢資料,C標準庫有一個函數(shù)可以幫助我們升冪:
double pow (double base, double exponent);
這樣夠了嗎?當然沒有,好戲才剛剛開始。
up決定手撕冪次函數(shù),用自己的辦法實現(xiàn)一遍,以便加深對C語言的理解。
經(jīng)過幾個小時的苦思冥想,發(fā)現(xiàn)了好幾種方法:循環(huán)遍歷相乘,遞歸相乘。遞歸相乘是最先想到的,這里就講講如何使用遞歸實現(xiàn)功能。
如果不了解遞歸,這里講個簡單的例子:俄羅斯套娃。
以下的代碼展示:
在第四行我們看到了遞歸的發(fā)生——函數(shù)調(diào)用自身。
遞歸由兩部分組成,傳遞與回歸。函數(shù)結(jié)構(gòu)大致分為兩個部分,一、是檢驗數(shù)據(jù)是否達到遞歸出口的條件,二、是篩選遞歸之外的情況,然后進行處理。
第一個是 if?,判斷相乘剩余的次數(shù),如果剩余次數(shù)在1次以上,則繼續(xù)傳遞。
第二個 else if ,篩選特例數(shù)據(jù),當一開始提供的次方數(shù)為0時的情況。
第三個是 else ,一旦pow為1時,回歸開始發(fā)生。
以下是樣例代碼,有些許潦草,但包含了一些標記,希望對你們有所幫助:
結(jié)果輸出:
還有一種方法是遍歷相乘法
原理是通過變量,控制相乘的次數(shù)。
以下提供簡短的代碼:
但代碼并不牢靠,還要對 pow 為 0 時的特殊情況進行考慮,在這里就不再贅述。