兩個任意長度的正數相減,這兩個正數可以帶小數點,也可以是整數,請輸出結果。 輸入的字串中,不會出現除了數字與小數點以外的其它字元,不會出現多個小數點以及小數點在第乙個字元的位置等非法情況,所以考生的程式中無須考慮輸入的數值字串非法的情況。
詳細要求以及約束:
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"
//edit in 2013/9/11
//實現功能
//實現任意長度的兩個正數(包括小數)相減
//函式原型: void decrease( char * _input1 , char * _input2 , char * _output )
//輸入引數:_input1 表示被減數,_input2 表示減數 , _output用於儲存最後結果,輸入引數的正確性已經保證了
char * reshape( char * _num ) ;//輔助函式,用於使輸入字串變成正確的資料格式
void reverse( char * _str ) ;//將輸入字串反轉
void decrease( char * _input1 , char * _input2 , char * _dest )
} if( negateflag )//若為負數
else
bool borrowstatus = false ;//借位標誌
while( fraclen2 < fraclen1 )//若被減數的小數字數比減數的小數字數長
while( fraclen1 < fraclen2 )//若被減數的小數字數比減數的小數字數短
fraclen2-- ;
} //fraclen1 == fraclen2 小數字數已經對齊
while( fraclen1 != 0 )
else
borrowstatus = false ;
*_output++ = tmpval + '0' ;
fraclen1-- ;
} if( *( in1 - 1 ) == '.'|| *(in2 - 1) == '.')
*_output++ = '.' ;
if(*( in1 - 1 ) == '.')--in1 ;
if( *( in2 - 1 ) == '.')--in2 ;
//處理整數部分
while( intlen1 && intlen2 )
else
borrowstatus = false ;
*_output++ = tmpval + '0' ;
intlen1-- , intlen2-- ;
} while( intlen1 )//若intlen1不為0
else
} else
*_output++ = *--in1 ;
intlen1-- ;
} if( negateflag )
*_output++ = '-' ;
*_output = '\0' ;
reverse( _dest ) ;
_output = reshape( _dest ) ;
strcpy( _dest , _output ) ;
}char * reshape( char * _num )
//把前面的0除掉
while( *first == '0' && *(first + 1 ) != '.' ) first++ ;
//把後面的0除掉
char * last = _num + strlen( _num ) - 1 ;
while( *last == '0')*last-- = '\0' ;
if ( *last == '.')//若小數部分沒有了,將小數點也去掉
*last = '\0' ;
if( negateflag )
*--first = '-' ;
return (first) ;
}void reverse( char * _str )
}
任意長度的字串輸入
任意長度的字串輸入 最近頻頻有朋友問我,用c語言怎樣才能實現任意長度的字串輸入?同時他們也談了很多自己的思路,有的建議定義乙個大型陣列,有的建議用鍊錶來實現等等,後來都被一一否定了。陣列再大空間還是乙個固定值,不能實現動態增長,事先定義不是太大了浪費記憶體,就是字串過長了導致溢位 而鍊錶的增加 查詢...
高精度任意長度實數乘法
模組 1 字串轉整型陣列模組 將字串轉化為整型陣列儲存。2 乘法演算法模組 實現兩個整型陣列表示的實數相乘,結果用整型陣列儲存。3 輸出模組 將得到的結果根據不同的需求輸出.1 字串轉整型陣列模組 將字串轉化為整型陣列儲存。inline long long trans to num const st...
任意長度的高精度大整數加法
方法 這裡用了資料結構棧,實際上棧更方便實現高精度加法。步驟 1 第乙個資料加數按輸入順序 高位到低位 入棧1。此時棧頂為最低位 2 第二個資料加數按輸入順序 高位到低位 入棧2。此時棧頂為最低位 3 將棧1 棧2均pop出棧頂做加法,並考慮進製,結果入棧3,這時棧3正好是低位入棧。4 處理多餘的棧...