大正數減法 華為2013校園招聘上機筆試題

2021-06-18 11:13:58 字數 2746 閱讀 2700

問題描述:    

兩個任意長度的正數相減,這兩個正數可以帶小數點,也可以是整數,請輸出結果。 輸入的字串中,不會出現除了數字與小數點以外的其它字元,不會出現多個小數點以及小數點在第乙個字元的位置等非法情況,所以考生的程式中無須考慮輸入的數值字串非法的情況。 

詳細要求以及約束:

1.輸入均為正數,但輸出可能為負數; 

2.輸入輸出均為字串形式;

3.如果輸出是正數則不需要帶符號,如果為負數,則輸出的結果字串需要帶負號

例如:2.2-1.1 直接輸出為「1.1」,1.1-2.2 則需要輸出為「-1.1」

4.輸出的結果字串需要過濾掉整數字前以及小數字後無效的0,小數字為全0的,直接輸出整數字

例如相減結果為11.345,此數值前後均不可以帶0,「011.345」或者「0011.34500」等等前後帶無效0的均視為錯誤 輸出。例如1.1-1.1結果為0.0,則直接輸出0。

要求實現函式:

void decrease(char *input1, char*input2, char *output)

【輸入】 char *iinput1 被減數

char*nput2 減數 

【輸出】 char *output 減法結果

【返回】 無

示例輸入:char *input1="2.2" 

char *input2="1.1"

輸出:char*output="1.1"

輸入:char *input1="1.1" 

char *input2="2.2"

輸出:char *output="-1.1"

以上摘自  ,但是考慮到沒有給出這個的源**,自己隨手寫了乙個,寫得不好,僅供娛樂,歡迎大神指點。

這次的**很長,我是為了寫的可讀性更高一點,很多地方比較累贅而且用的方法比較直接,也是我一開始直接想到的。如果有更好的方法希望大家提供哈...

//正數減法

//問題描述:

//兩個任意長度的正數相減,這兩個正數可以帶小數點,也可以是整數,請輸出結果。

//輸入的字串中,不會出現除了數字與小數點以外的其它字元,不會出現多個小數點以及小數點在第乙個字元的位置等非法情況,所以考生的程式中無須考慮輸入的數值字串非法的情況。

//詳細要求以及約束:

//1.輸入均為正數,但輸出可能為負數;

//2.輸入輸出均為字串形式;

//3.如果輸出是正數則不需要帶符號,如果為負數,則輸出的結果字串需要帶負號

//例如:2.2-1.1 直接輸出為「1.1」,1.1-2.2 則需要輸出為「-1.1」

// 4.輸出的結果字串需要過濾掉整數字前以及小數字後無效的0,小數字為全0的,直接輸出整數字

//例如相減結果為11.345,此數值前後均不可以帶0,「011.345」或者「0011.34500」等等前後帶無效0的均視為錯誤 輸出。例如1.1-1.1結果為0.0,則直接輸出0。

//要求實現函式:

//void decrease(char *input1, char*input2, char *output)

//【輸入】 char *iinput1 被減數

//char*nput2 減數

//【輸出】 char *output 減法結果

//【返回】 無

//示例

//輸入:char *input1="2.2"

//char *input2="1.1"

//輸出:char*output="1.1"

//輸入:char *input1="1.1"

//char *input2="2.2"

//輸出:char *output="-1.1"

#include #include //得到小數點的位置

int getdot(char *input1)//小數點計算函式

void decrease(char *input1, char*input2, char *output)

else if(str1[i] < str2[i])

else if(i == length - 1)

}//把沒有小數點的全部補齊

result[dot1>dot2?dot1:dot2 + 1] = '.';

max[dot1>dot2?dot1:dot2 + 1] = '.';

min[dot1>dot2?dot1:dot2 + 1] = '.';

//5.開始運算

for(int i = length-1;i > 0;--i)

int temp;

temp = max[i] - min[i];

if(temp < 0)

j--;

}max[j]--;

temp += 10;

} result[i] = temp + '0';

} if(!isplus)

output[0] = '-';

//6.把結果字元格式化給output字串

for(unsigned int i = strlen(result);i >= 0;++i)

unsigned int first = 1;//記錄第一位有效位的起始位置

while(result[first] == '0')

strcpy(output,&result[first]);

}int _tmain(int argc, _tchar* argv)

{ char r[10000];

decrease("2.2", "1.1",r);

cout<

2013華為校園招聘機試題

題目描述 60分 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。比如字串 abacacde 過濾結果為 abcde 要求實現函式 void stringfilter const char pinputstr,long li...

2013華為校園招聘上機題

題目描述 60分 通過鍵盤輸入一串小寫字母 a z 組成的字串。請編寫乙個字串過濾程式,若字串中出現多個相同的字元,將非首次出現的字元過濾掉。比如字串 abacacde 過濾結果為 abcde 要求實現函式 void stringfilter const char pinputstr,long li...

2013屆華為校園招聘機試題

筆試題目 機試,共兩題 題目一 子串分離 題目描述 通過鍵盤輸入任意乙個字串序列,字串可能包含多個子串,子串以空格分隔。請編寫乙個程式,自動分離出各個子串,並使用 將其分隔,並且在最後也補充乙個 並將子串儲存。如果輸入 abc def gh i d 結果將是abc,def,gh,i,d,要求實現函式...