在做九度的机试题时,感觉C代码能够看到代码的灵魂,但是真正掌握算法后,还是用C++比较好,C++封装的函数非常好用。
#include <iostream>
#include <string>
#include <cstring>
#include <map>
#include <cstdlib>
#include <algorithm>
using namespace std;
int main()
{
string x,y;
string s1,s2,s3,s4,ss;
map<int,char>m,mm;
m[0] = '0';
m[1] = '1';
m[2] = '2';
m[3] = '3';
m[4] = '4';
m[5] = '5';
m[6] = '6';
m[7] = '7';
m[8] = '8';
m[9] = '9';
mm['0'] = 0;
mm['1'] = 1;
mm['2'] = 2;
mm['3'] = 3;
mm['4'] = 4;
mm['5'] = 5;
mm['6'] = 6;
mm['7'] = 7;
mm['8'] = 8;
mm['9'] = 9;
int n;
cin >> n;
while( cin >> x >> y )
{
ss = "";
int position1 = x.find('.');
s1.assign( x, 0, position1 );
s2.assign( x, position1+1, (x.length()- position1-1) );
int position2 = y.find('.');
s3.assign( y, 0, position2 );
s4.assign( y, position2+1, (y.length()- position2-1) );
reverse(s1.begin(),s1.end());
//reverse(s2.begin(),s2.end());
reverse(s3.begin(),s3.end());
//reverse(s4.begin(),s4.end());
int flag1 = 0;
int pa,pb,pc;
if( s1.size() < s3.size())
{
string t = s1;
s1 = s3;
s3 = t;
}
for( int j = 0; j < s1.size(); j++ )
{
pa = mm[s1[j]];
if( j > s3.size())
pb = 0;
else pb = mm[s3[j]];
pc = pa + pb + flag1;
if( pc > 9 )
{
pc = pc - 10;
flag1 = 1;
}
else
flag1 = 0;
s1[j] = m[pc];
}
if(flag1 == 1 )
s1 += "1";
int flag2 = 0;
int pa1,pb1,pc1;
if( s2.size() < s4.size())
{
string k = s2;
s2 = s4;
s4 = k;
}
for( int j = s2.size(); j >= 0; j-- )
{
pa1 = mm[s2[j]];
if( j > s4.size())
pb1 = 0;
else pb1 = mm[s4[j]];
pc1 = pa1 + pb1 + flag2;
if( pc1 > 9 )
{
pc1= pc1 -10;
flag2 = 1;
}
else
flag2 = 0;
s2[j] = m[pc1];
}
if(flag2 == 1 )
ss = "1";
int flag3 = 0;
int pa2,pb2,pc2;
if( s1.size() < ss.size())
{
string t = s1;
s1 = ss;
ss = t;
}
for( int j = 0; j < s1.size(); j++ )
{
pa2 = mm[s1[j]];
if( j > ss.size())
pb2 = 0;
else pb2 = mm[ss[j]];
pc2 = pa2 + pb2 + flag3;
if( pc2 > 9 )
{
pc2 = pc2 -10;
flag3 = 1;
}
else
flag3 = 0;
s1[j] = m[pc2];
}
if(flag3 == 1 )
s1 += "1";
int count;
reverse(s2.begin(),s2.end());
for( int i = 0; i <= s2.size(); i++ )
{
if( s2[i] != '0' )
{
count = i;
break;
}
}
string sr;
sr.assign(s2,count,s2.size()-count);
reverse(s1.begin(),s1.end());
reverse(sr.begin(),sr.end());
cout << s1 << "." << sr << endl;
}
return 0;
}