实验1
问题描述
求两个自然数 m 和 n 的最大公约数。设m和n是两个自然数,m和n的最大公约数记为gcd(m,n),是能够同时被m和n整除的最大整数。测试数据从txt中读取。
算法1:整数检测
算法描述
1.t = min{
m, n}。
2.m除以t,若余数为0,则执行步骤3,否则执行第4 步。
3.n除以t,若余数为0,则返回t值,否则执行第4 步。
4. t = t - 1,转第2 步。
#include<iostream>
#include<time.h>
#include<stdio.h>
#include<dos.h>
#include<iomanip>
using namespace std;
int Continuous_int(int m,int n)
{
int t;
if(m<n)
{
t=m;
}
else
{
t=n;
}
while(t>0)
{
if(m%t==0&&n%t==0)
{
return t;
}
else
{
t--;
}
}
}
//clock计数法
int main()
{
int m,n;
double t1,t2;
FILE *fp=fopen("in.txt","r");
if(!fp)
{
cout<<"can't open file"<<endl; return -1;
}
cout<<"算法1:连续整数法"<<endl;
t1=clock();
while(!feof(fp))
{
fscanf(fp,"%d",&m);
fscanf(fp,"%d",&n);
cout<<left<<setw(11)<<m<<"与 "<<left<<setw(11)<<n<<"最大公约数: "<<Continuous_int(m,n)<<endl;
}
t2=clock();
fclose(fp);
cout<<"耗时(计数法):"<<(t2-t1)/CLK_TCK<<"秒"<<endl;
return 0;
}
//time计时法
int main()
{
int m,n;
time_t start,end;
FILE *fp=fopen("in.txt","r");
if(!fp)
{
cout<<"can't open file"<<endl;
return -1;
}
cout<<"算法1:连续整数法"<<endl;
start=time(NULL);
while(!feof(fp))
{
fscanf(fp,"%d",&m);
fscanf(fp,"%d",&n);
cout<<left<<setw(11)<<m<<"与 "<<left<<setw(11)<<n<<"最大公约数: "<<Continuous_int(m,n)<<endl;