展轉相除法求最大公倍數和最小公約數

這是個人第一篇博客。但願本身之後也能堅持下去,來記錄我學習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型的相關知識。
相關文章
相關標籤/搜索