题干
C++实现
# define _CRT_SECURE_NO_WARNINGS
# include <stdio.h>
# include <map>
# include <string>
using namespace std;
string GetInteger ( string a) {
return a. substr ( 0 , a. find ( '.' ) ) ;
}
string GetFraction ( string a) {
return a. substr ( a. find ( '.' ) + 1 , a. size ( ) - a. find ( '.' ) ) ;
}
void FractionPlus ( string& res, int & carry, string fa, string fb) {
int size = max ( fa. size ( ) , fb. size ( ) ) ;
while ( fa. size ( ) < size) {
fa. push_back ( '0' ) ;
}
while ( fb. size ( ) < size) {
fb. push_back ( '0' ) ;
}
res. resize ( size) ;
carry = 0 ;
for ( int i = size - 1 ; i >= 0 ; i-- )
{
if ( fa[ i] + fb[ i] + carry - '0' > '9' ) {
res[ i] = fa[ i] + fb[ i] + carry - '0' - 10 ;
carry = 1 ;
}
else {
res[ i] = fa[ i] + fb[ i] + carry - '0' ;
carry = 0 ;
}
}
return ;
}
void IntegerPlus ( string& res, int carry, string ia, string ib) {
res. clear ( ) ;
for ( int i = ia. size ( ) - 1 , j = ib. size ( ) - 1 ; i >= 0 || j >= 0 || carry == 1 ; -- i, -- j) {
if ( i >= 0 && j >= 0 ) {
if ( ia[ i] + ib[ j] + carry - '0' > '9' ) {
res. insert ( res. begin ( ) , ia[ i] + ib[ j] + carry - '0' - 10 ) ;
carry = 1 ;
}
else {
res. insert ( res. begin ( ) , ia[ i] + ib[ j] + carry - '0' ) ;
carry = 0 ;
}
}
else if ( i >= 0 && j < 0 ) {
if ( ia[ i] + carry > '9' ) {
res. insert ( res. begin ( ) , ia[ i] + carry - 10 ) ;
carry = 1 ;
}
else {
res. insert ( res. begin ( ) , ia[ i] + carry) ;
carry = 0 ;
}
}
else if ( i < 0 && j >= 0 ) {
if ( ib[ j] + carry > '9' ) {
res. insert ( res. begin ( ) , ib[ j] + carry - 10 ) ;
carry = 1 ;
}
else {
res. insert ( res. begin ( ) , ib[ j] + carry) ;
carry = 0 ;
}
}
else {
res. insert ( res. begin ( ) , '1' ) ;
carry = 0 ;
}
}
return ;
}
int main ( ) {
char arra[ 1024 ] ;
char arrb[ 1024 ] ;
while ( scanf ( "%s%s" , arra, arrb) != EOF ) {
string a = arra;
string b = arrb;
string ia = GetInteger ( a) ;
string ib = GetInteger ( b) ;
string fa = GetFraction ( a) ;
string fb = GetFraction ( b) ;
string res;
int carry;
FractionPlus ( res, carry, fa, fb) ;
string ires;
IntegerPlus ( ires, carry, ia, ib) ;
printf ( "%s.%s\n" , ires. c_str ( ) , res. c_str ( ) ) ;
}
return 0 ;
}