求高手帮忙测试下高精度浮点型加法
代码如下
#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 编辑 ]