| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 511 人关注过本帖
标题:求高手帮忙测试下高精度浮点型加法
取消只看楼主 加入收藏
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
结帖率:94.44%
收藏
已结贴  问题点数:20 回复次数:3 
求高手帮忙测试下高精度浮点型加法


代码如下
#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
草狼
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: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
收藏
得分:0 
回复 6楼 点线面
那样没意思,我应该是有种特殊情况没考虑到,个人是这么认为的
2011-02-04 21:31
快速回复:求高手帮忙测试下高精度浮点型加法
数据加载中...
 
   



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

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