任意長度正數的相減

2021-06-18 08:56:42 字數 2640 閱讀 4917

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

詳細要求以及約束:

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 處理多餘的棧...