面試題二(高精度演算法)

2021-05-28 00:17:02 字數 1509 閱讀 2498

高精度整數加法

要求實現函式:

void add (const char *num1, const char *num2, char *result)

【輸入】num1:字串形式運算元1,如果運算元為負,則num1[0]為符號位'-'

num2:字串形式運算元2,如果運算元為負,則num2[0]為符號位'-'

【輸出】result:儲存加法計算結果字串,如果結果為負,則result[0]為符號位。

注:i、   當輸入為正數時,'+'不會出現在輸入字串中;當輸入為負數時,'-'會出現在輸入字串中,且一定在輸入字串最左邊位置;

ii、  輸入字串所有位均代表有效數字,即不存在由'0'開始的輸入字串,比如"0012", "-0012"不會出現;

iii、       要求輸出字串所有位均為有效數字,結果為正或0時'+'不出現在輸出字串,結果為負時輸出字串最左邊位置為'-'。

示例 輸入:num1 = "580"

num2 = "-50"

輸出:result = "530"

輸入:num1 = "580"

num2 = "-600"

#include #include #include void convert(char *str) ///字串倒序

}void add (const char *num1, const char *num2, char *result)

; char *pnum1=(char*)num1;

char *pnum2=(char*)num2;

char *presult=result;

bool isnum1posint=true; 判斷符標記

bool isnum2posint=true;

bool i***change=false; ///是否交換兩個數的資訊標誌位,將絕對值大的數放在第乙個數上。

if (*pnum1=='-')

if (*pnum2=='-')

if (*pnum1=='0' || *pnum2=='0') /判斷輸入資料是否合格

if (len1=len2) //後面的都置為'0'

ret[i]+=(pnum1[i]-'0')+(pnum2[i]-'0');

if (ret[i]>=10)

}if (!isnum1posint) ///判斷是兩正數相加還是兩負數相加

if (ret[i]==1) ///如果有進製,長度加1

}else ///如果為一正一負,大數在前,小數在後,相減

ret[i]+=(pnum1[i]-'0')-(pnum2[i]-'0');

if (ret[i]<0) 如果小於0,則需要借位。

}if (ret[len1-1]==0)

if (!isnum1posint)

}for (int j=0;j

演算法 高精度乘法2(高精度乘高精度)

題目描述 高精度乘,求兩個很大的非負整數相乘的結果。輸入 2個非負整數,每個一行,每個整數不超過240位。輸出 乙個整數,表示相乘的結果。例子 為了和演算法對應方便,用上面數乘下面數的方法12 5 2512 5502 5312 5為了運算方便,將上面兩數倒置,得到的結果也為倒序下標0 1234 56...

高精度演算法 791 高精度加法

給定兩個正整數,計算它們的和。輸入格式 共兩行,每行包含乙個整數。輸出格式 共一行,包含所求的和。資料範圍 1 整數長度 100000 輸入樣例 1223 輸出樣例 35注意點 1.兩個整數較大,用字串來存,這樣的話,可以呼叫它的size 方法 2.將兩個大的整數,存入vector陣列中,最好把整數...

高精度演算法

任務 高精度,計算大數乘小數 引數 乘法函式mul引數為 被乘數a,儲存最終結果的ans陣列,乘數b 結果 ans陣列中ans 0 為最高位,以此類推 include include using namespace std void mul char a,char ans,int b 任務 高精度,...