ACM题目中有时测试样例的输入比较麻烦,一次次手动输入肯定很费时间。所以用freopen函数,是一种比较快捷的办法。具体代码是
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
事先应该在所在工程的源文件处(右击工程可以打开所在文件夹),在这个文件夹里面新建一个名为 in 的文本文档,这个就作为输入数据文件,将要输入的数据预先存入其中。
再在这个文件夹里面新建一个名为 out 的文本文档,这样执行上面两行代码之后,输出结果就会自动存入out.txt中。
进一步,在源代码的开头可以添加这样一行代码:
#define FILE
其中 FILE 可以是其他的名称,然后在读入读出语句的开头和结尾添加两行代码,如下:
#ifdef FILE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
这样就是告诉编译器,如果我们事先定义了“FILE”,就执行freopen两句,这个称为“活动预处理模块”。
以一个很简单的问题为例:输入16进制数,将其改写为10进制
用文件读入读出的代码如下:
#include<iostream>
#include<cstring>
#define FILE
using namespace std;
int main()
{
#ifdef FILE
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
char data16[400];
int data10=0,d;
int i;
/**********Program**********/
int j=0;
while(cin>>data16)
{
int num16[100];
d=strlen(data16);
int power[100];
for(i=0;i<d;i++)
{
switch(data16[i])
{
case 'A':num16[i]=10; break;
case 'B':num16[i]=11; break;
case 'C':num16[i]=12; break;
case 'D':num16[i]=13; break;
case 'E':num16[i]=14; break;
case 'F':num16[i]=15; break;
default:num16[i]=data16[i]-'0';
}
// cout<<data16[i]<<endl;
}
for(i=0;i<d;i++)
{
power[i]=1;
while(j<d-1-i)
{
power[i]*=16;
j++;
}
j=0;
}
for(i=0;i<d;i++)
{
// cout<<data16[i]<<" "<<i<<endl;
// cout<<power[i]<<" "<<i<<endl;;
data10+=num16[i]*power[i];
}
/********** End **********/
cout<<data10<<endl;
}
// system("pause");
return 0;
}