阿里2018實習生筆試題 大數相加

2021-08-20 01:21:11 字數 1932 閱讀 6186

兩個大數使用string 表示,請實現乙個函式,將他們相加。

注意:

1. 大數可能包含小數,比如:123.07+8796

2. 輸入可能有誤,請檢查是否合法,不合法返回值為false

3. 大數不包含科學計數法。

檢查string是否合法;不合法返回「false」。

分離string,分成整數部分和小數部分。

對整數部分進行加法,先對齊補零。

對小數部分進行加法,先對齊補零。

負數情況如何處理?轉化為大數減法。先判斷哪個是作為被減數。

空,+,-,.5,+345,-234;

#include "stdafx.h"

#include

#include

using

namespace

std;

// 正負數判斷

bool ispositive(string number) // number合法情況下

// 是否合法

bool isnumber(string number)// 空,+,-不合法

while (number[i] != '.'&&i < len)

if (number[i] == '.')

}if (i == len)

return

true;

return

false;

}// getting inter and decimal by '.'

bool gettinginterdecimal(string number, string &inter, string &decimal)

string addalign(string &add1, string &add2, int right, bool &carry) // right=1,mean 右對齊加;else 左對齊加

while (add1.size() < add2.size())

bool carryadd = 0;

string addsum = add1;

for (int i = add1.size()-1; i >= 0; i--)

else

carryadd = 0;

}carry = carryadd;

return addsum;

}bool cmpnumber(string inter1, string inter2, string decimal1, string decimal2)

string subalign(string &sub1, string &sub2, int right,bool &carry) // right=1,mean 右對齊加;else 左對齊加

string sub=sub1;

bool carrysub = 0;

for (int i = sub2.size() - 1; i >= 0; i--)

else

carrysub = 0;

}carry = carrysub;

return sub;

}string stringadd(string add1, string add2)

string intersum = addalign(add1inter, add2inter, 1, carry1);

if (carry1)

intersum = '1' + intersum;

sum = intersum + "." + decimalsum;

if (!add1sign)

sum = '-' + sum;

}else

// 乙個正數和乙個負數情況,轉化為減法,大數減小數

else

}return sum;

}void test()

另一種運算子過載思路 可參考

2020阿里實習生招聘筆試題

小強有n個養雞場,第i個養雞場初始有a i 只小雞,小強的每個養雞場每天早上都會增加k只小雞,到了下午小強會把雞最多的雞場賣掉一半雞,那麼小強想知道m天後他所有養雞場一共有幾隻雞。第一行輸入三個正整數n,m,k 第二行輸入n個正整數a i 表示養雞場雞數量。1 n 100000,1 m 100000...

頭條2018實習生筆試

這個題的核心是用了乙個map,key是每一種喜好程度值k,然後把同乙個k的使用者id放在乙個vector裡。即map 每乙個查詢直接在要查詢的喜好程度k相應的使用者id陣列中找。include include include using namespace std int main 查詢 這個題我也...

阿里巴巴暑期實習生筆試題

1.kmp演算法 長度為n的主串t中匹配長度為m的子串p n m 匹配成功 存在p的每個字元依次和t中的乙個連續字串行相等 輸出主串中匹配串起始位置,匹配失敗輸出 1 思路 首先用o m 的時間對子串進行預處理,可通過子串本身的特性判斷出需要右移幾位才是可能匹配的 然後用o n 的時間去完成匹配 時...