問題描述:
兩個任意長度的正數相減,這兩個正數可以帶小數點,也可以是整數,請輸出結果。 輸入的字串中,不會出現除了數字與小數點以外的其它字元,不會出現多個小數點以及小數點在第乙個字元的位置等非法情況,所以考生的程式中無須考慮輸入的數值字串非法的情況。
詳細要求以及約束:
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,要求實現函式...