以下のソースコードでは入力された2つの正の整数に対して最大公約数と最小公倍数を出力します。このプログラムはきちんと動くのですが、最小公倍数を求めるbaisuu関数の、returnのところを、ab/yakusuu(a,b)として実行すると、コンパイルエラーはでないものの、明らかにおかしな数が出力されてしまいます。ab/yakusuu(a,b)でも式は間違っていないと思うのですがなぜ違うのでしょうか。
a*b/yakusuu(a,b)とすると
例えば
$ ./a.out
50000000 30000000
10000000 414
となってしまいました。
以下は正しいソースコードです。
lang
1#include <iostream> 2#include <vector> 3using namespace std; 4 5unsigned int yakusuu(unsigned int a,unsigned int b){ 6 if((a==0)||(b==0)) return 0; 7 while(a!=b){ 8 if(a>b)a=a-b; 9 else b=b-a; 10 } 11 return a; 12} 13unsigned int baisuu(unsigned int a,unsigned int b){ 14 return (a/yakusuu(a,b))*b; 15} 16int main(){ 17unsigned int a,b; 18vector<unsigned int> p,q; 19int t=0; 20while(cin>>a>>b){ 21p.push_back(a); 22q.push_back(b); 23t++; 24}; 25for (int i = 0; i < t; i++) 26{ 27 cout<<yakusuu(p[i],q[i])<<" "<<baisuu(p[i],q[i])<<endl; 28} 29 30}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/13 14:48