您的位置:首页 > 编程语言 > C语言/C++

长浮点数的加法

2014-04-07 10:01 351 查看
在做九度的机试题时,感觉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,
4000
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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息