2014創新工廠某移動筆試演算法題:
1、合併有序鍊錶,給定兩個公升序的鍊錶,返回乙個合併之後的公升序鍊錶。(遞迴好做些)
節點結構:
struct node
else
return pmergelist;
}2、大整數乘法,給定兩個長度不超過10000的整數,返回乘法的結果。
char* multi(char* number_a, char* number_b) //判斷返回值不是null的話,說明計算成功
簡單的題目,所以要特別注意邊界控制,非法輸入等問題。
char* multi(char* number_a, char* number_b) //判斷返回值不是null的話,說明計算成功
int flag = 1;//標記正負號0是正號,1是負號
if((number_a[0] == '-' && number_b[0] == '-') ||(number_a[0] != '-' && number_b[0] != '-'))
int len_a = strlen(number_a);//a陣列長度
int len_b = strlen(number_b);//b陣列長度
int *a = (int *)malloc(sizeof(int) * len_a);//a字元陣列轉換的大數
int *b = (int *)malloc(sizeof(int) * len_b);//b字元陣列轉換的大數
int *c = (int *)malloc(sizeof(int) * (len_a + len_b + 1));//存放計算後的大數
char *ch = (char *)malloc(sizeof(char) * (len_a + len_b + 1));//計算後的大數轉換成字串
memset( a, 0, sizeof(int) * len_a);
memset( b, 0, sizeof(int) * len_b);
memset( c, 0, sizeof(int) * (len_a + len_b + 1));
memset( ch, '\0', sizeof(char) * (len_a + len_b + 1));//填充\0
int i = 0, al = 0, bl = 0, j = 0;
for(i = len_a-1; i >= 0 &&number_a[i]!='-'; i--) //轉換
for(i = len_b-1; i >= 0 &&number_b[i]!='-'; i--) //轉換
for( i = 0;i < al; i ++ ) //大數計算
for( i = 0; i <= (len_a + len_b); i ++ )
} int index = 0;//做返回的陣列的下標
if(flag == 1)
bool bstartoutput = false;
for( i = len_a + len_b; i >= 0; i -- )
else if( c[i] != 0)
} if((strlen(ch) == 1 && ch[0] == '-') || strlen(ch) == 0)//處理當結果為0和當結果為0但是符號位為負的情況
free(a);
free(b);
free(c);
return ch;
}
測試用例
89 u3
ouput:null
ui7 98
ouput:null
er ui
ouput:null
21 -1
ouput:-21
-1 21
ouput:-21
-1 -2
ouput:2
0 0ouput:0
0 12
ouput:0
11 0
ouput:0
0 -2
ouput:0
-5 0
ouput:0
-9999 9999
ouput:-99980001
-9999 -9999
ouput:99980001
9999 9999
ouput:99980001
1234 4321
ouput:5332114
02 09
ouput:18
-008 8
ouput:-64
8 -007
ouput:-56
完整**:
#includeusing namespace std;
char a[10], b[10];
char c[12];
char* multi(char* number_a, char* number_b) //判斷返回值不是null的話,說明計算成功
int flag = 1;//標記正負號0是正號,1是負號
if((number_a[0] == '-' && number_b[0] == '-') ||(number_a[0] != '-' && number_b[0] != '-'))
int len_a = strlen(number_a);//a陣列長度
int len_b = strlen(number_b);//b陣列長度
int *a = (int *)malloc(sizeof(int) * len_a);//a字元陣列轉換的大數
int *b = (int *)malloc(sizeof(int) * len_b);//b字元陣列轉換的大數
int *c = (int *)malloc(sizeof(int) * (len_a + len_b + 1));//存放計算後的大數
char *ch = (char *)malloc(sizeof(char) * (len_a + len_b + 1));//計算後的大數轉換成字串
memset( a, 0, sizeof(int) * len_a);
memset( b, 0, sizeof(int) * len_b);
memset( c, 0, sizeof(int) * (len_a + len_b + 1));
memset( ch, '\0', sizeof(char) * (len_a + len_b + 1));//填充\0
int i = 0, al = 0, bl = 0, j = 0;
for(i = len_a-1; i >= 0 &&number_a[i]!='-'; i--) //轉換
for(i = len_b-1; i >= 0 &&number_b[i]!='-'; i--) //轉換
for( i = 0;i < al; i ++ ) //大數計算
for( i = 0; i <= (len_a + len_b); i ++ )
} int index = 0;//做返回的陣列的下標
if(flag == 1)
bool bstartoutput = false;
for( i = len_a + len_b; i >= 0; i -- )
else if( c[i] != 0)
} if((strlen(ch) == 1 && ch[0] == '-') || strlen(ch) == 0)//處理當結果為0和當結果為0但是符號位為負的情況
free(a);
free(b);
free(c);
return ch;
}int main()
{ while(cin>>a>>b)
{ char *tmp;
if(tmp = multi(a, b))
{ cout<<"ouput:"<
創新工廠面試經歷
周五接到創新工廠的面試 讓周一過去。我原先是投的實習崗位,畢竟nokia離學校太遠了,想找個離學校近點的地方。諮詢過原本去面試過的同學,說起來題目都很簡單,無非是折半查詢什麼的,面試個把小時就結束了。結果到我這 我12點50到那,跟乙個面試我的工程師一直面對面的聊到2點半,活活面了1個半小時,悲慘 ...
人人都是創新工廠
更多關於 人人都是創新工廠 內容簡介 書籍經濟管理學書籍 人人都是創新工廠 在競爭白熱化的今天,如何才能使自己變得不可或缺 這是一部專門寫給員工的創新手冊。目前市場中的眾多創新類書籍都是在圍繞企業如何制定創新戰略展開。全球創新大師羅伯特?塔克告訴你,如何讓每個一線員工在自己的工作中發揮創新思維。不要...
創新工場筆試小記(創新工廠演算法筆試題)
筆試題量很小,答題時間1個小時。1道填空題,9道左右選擇題,最後一道程式設計題。第一題 c intf intx return c int f int x return c 對於int a 65536 1024 8 1 int b f a 執行後b等於多少?第二題 5個骰子,六個面分別標有1 6,現在...