这是个人第一篇博客。但愿本身之后也能坚持下去,来记录我学习C++的一些历程。ios
今天作ACM题,是求最小公倍数和最大公因数的。用展转相除法作。我一开始用int型,发现测试普通数据时均得出正确答案。可是用题目中的测试数据30000000,50000000的时候,最大公约数是没有问题,但最大公倍数显示是负数。后来发现是int型的存储空间不够。换成long或者long long型就能够。函数
而后还学会了怎样用EOF结束程序。必须在C的环境下,用while(scanf("%d",&a)!=EOF)完成。学习
如下是个人代码:测试
#include<iostream> #include<cstdio>//用有关C程序的函数时,需加此头文件 using namespace std; main() { long a,b,c,d,num;//a,b为测试数 while(scanf("%d %d",&a,&b)!=EOF)//输入EOF结束,必须a,b均在scanf里。以前写的时候,b在while中,不成功 { num=a*b;//为求最小公倍数作准备。最小公倍数=两数乘积/最小公约数 for(;b!=0;)//展转相除。看网上代码,须要先比较大小,但我测试,不比较也可。 { c=a%b; a=b; b=c; } d=num/a; cout<<a<<" "<<d<<endl;//a为最大公约数,d为最小公倍数。 } }
学习小结:了解了关于展转相除法求最大公约数和最小公倍数的方法spa
了解了C++中如何用EOF结束程序 初步了解了long型,以及long long型的相关知识。