标题:求高手帮忙测试下高精度浮点型加法
只看楼主
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
已结贴  问题点数:20 回复次数:6 
求高手帮忙测试下高精度浮点型加法


代码如下
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int shang;

void xAdd(string &xstr1, string &xstr2){
//    cout << xstr1 <<"  " <<  xstr2 << endl;
    if( xstr1.size() < xstr2.size() ){
        string xstr3;
        xstr3=xstr1;
        xstr1=xstr2;
        xstr2=xstr3;
    }
//    cout << "小数:";
//    cout << xstr1 <<"  " <<  xstr2 << endl;
    int k=xstr2.size()-1;
    for( int i=k; i>=0; --i ){
        char str=xstr1[i];
        xstr1[i]=( (xstr1[i]-'0' )+shang+( xstr2[i]-'0') )%10+'0';
        shang=( (str-'0')+shang+(xstr2[i]-'0') )/10;
    }
//    cout << shang << " " << xstr1<<endl;
}

void zAdd(string &zstr1,string &zstr2){
    if( zstr1.size() < zstr2.size() ){
        string zstr3;
        zstr3=zstr1;
        zstr1=zstr2;
        zstr2=zstr3;
    }
//    cout << "整数:";
//    cout << zstr1 <<"  " <<  zstr2 << endl;

    int n=zstr1.size()-1;
    int m=zstr2.size()-1;
//    cout << n << " " << m << endl;
    while( n>=0 && m>=0 ){
        char str=zstr1[n];
        zstr1[n]=((zstr1[n]-'0')+(zstr2[m]-'0')+shang)%10+'0';
        shang=((str-'0')+(zstr2[m]-'0')+shang)/10;
        --n;
        --m;
    }
    while( n>=0 ){
        char str=zstr1[n];
        zstr1[n]=(zstr1[n]-'0'+shang)%10+'0';
        shang=(str-'0'+shang)/10;
        --n;
    }
//    cout << "上和余数:";
//    cout << shang << " " << zstr1 << endl;
}

int main(){
    string str1,str2;
    while( cin >> str1 >> str2 ){
        istringstream infile1( str1 );
        istringstream infile2( str2 );
        string zstr1,xstr1,zstr2,xstr2;

        getline( infile1,zstr1,'.');
        getline( infile1,xstr1 );

        getline( infile2,zstr2,'.');
        getline( infile2,xstr2 );

        shang = 0;
        xAdd(xstr1,xstr2);
        zAdd(zstr1,zstr2);

        int k=xstr1.size()-1;
        while( k>=0 ){
            if( xstr1[k]=='0' )
                xstr1[k]='\0';
            else
                break;
            --k;
        }
        if( shang ){
            cout << shang;
        }
        int w=zstr1.size()-1;
        int q=0;
        while( q<w && !shang ){
            if( zstr1[q] == '0' )
                q++;
            else
                break;
        }
        for( int i=q; i<=w; ++i ){
            cout << zstr1[i];
        }
        //cout << xstr1.size() << endl;
        if( !xstr1.empty() && xstr1[0] != '\0' ){
            cout << "." <<  xstr1;
        }
            cout << endl;
    }
    return 0;
}


我自己怎么测数据都对的,可是OJ说有错误,请高手帮忙测试下啊,那种数据错了啊 多谢啦
原题在这里:http://acm.hdu.

[ 本帖最后由 草狼 于 2011-2-4 21:35 编辑 ]
搜索更多相关主题的帖子: 测试 void include shang 
2011-01-25 20:11
VFleaKing
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2010-1-5
得分:7 
同志,你写的是C++……
而且,你没有考虑负数的情况

[ 本帖最后由 VFleaKing 于 2011-2-1 21:50 编辑 ]
2011-02-01 21:46
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
得分:7 
用随机数

小代码,大智慧
2011-02-01 21:52
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 2楼 VFleaKing
数都是正的  不用考虑负数情况, 还有就是 我这好像,可能,也许是用C++写的
2011-02-04 14:09
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 3楼 点线面
几十亿,几百亿,几千亿的大数你如何用随机数得到啊?
2011-02-04 14:11
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
得分:0 
回复 5楼 草狼
每一位用0~9表示
  a[i] = e.g rand()%10;

小代码,大智慧
2011-02-04 14:31
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 6楼 点线面
那样没意思,我应该是有种特殊情况没考虑到,个人是这么认为的
2011-02-04 21:31



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-331565-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.083825 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved