新手上路 一个C++问题

来源:百度知道 编辑:UC知道 时间:2024/05/19 03:25:48
题目是:现有一个abc.txt文件,内含一些数对,找出全部积为16!的数对,并输出。主要浮点数的比较方法。
TXT文件内容为:
112233 445566
8717829120000 2.4
16000000 1307674.368
10000 2092278988.8
1234567 890123
我编的源程序是:

//------------------
//Vector operation
//------------------
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
//-----------------
int main(){
long int m;
for(int k=1;k<=16;k++)
m*=k;
ifstream in("abd.txt");
vector<double> s;
for(double a;in>>a;)
s.push_back(a);
for(int i=0;i<s.size()-1;i++)
for(int j=i+1;j<s.size();j++)
{if(abs(s[i]*s[j]-m)<1e-06)
cout<<s[i]<<' '<<s[j]<<"\n";}
}//----------------
调试通过,但是运行的时候出不来正确的结果,不知道什么原因,各位兄弟姐妹谁能帮帮我,谢了!
这个问题的输出样板是:
8717829120000 2.4
16000000 1307674.368
10000 2092

有改动的地方我在行后加注释了,参考一下吧~~

//------------------
//Vector operation
//------------------
#include<iostream>
#include<vector>
#include<fstream>
using namespace std;
//-----------------
int main()
{
double m=1.0; //long和int在VC里是一样的,16!一样会超,改用double吧
for(int k=1;k<=16;k++)
m*=k;
ifstream in("abc.txt"); //这里原来是"abd.txt"....
vector<double> s;
for(double a;in>>a;)
s.push_back(a);
cout.precision(15); //控制一下输出格式
for(int i=0;i<s.size()-1;i++)
for(int j=i+1;j<s.size();j++)
{
if(abs(s[i]*s[j]-m)<1e-06)
cout<<s[i]<<' '<<s[j]<<"\n";
}
}//----------------

在我机器上运行的结果与你给的样版相同啊,在你那里运行不正确么?
现在什么地方有问题呢?