(百例プログラミング)47.スコアの正確な値の計算
1235 ワード
テーマ:配列を用いてM/Nの値を正確に計算する.M/Nが無限循環小数である場合、その第1の循環節を計算して出力し、同時に循環節の立ち上がり位置を出力する.
// : M/N
//BY AS1138 2011-03-29
#include<iostream>
#include <vector>
using namespace std;
int main(void)
{
int a,b;
int t1 = 0,t2 = 0;
int iLoca = 0;
vector<int> iVal;
bool tem = true;
cout<<" 2 :"<<endl;
cin>>a>>b;
cout<<a<<"/"<<b<<" :"<<endl;
while(1)
{
t1 = a%b;
if(tem)
iVal.push_back(a/b);
if(t1 == a)
{
a = t1 * 10;
tem = true;
}
else
{
a = t1;
tem = false;
}
if(t1 == 0)
break;
if(t1 == t2 && !tem)
{
iLoca = iVal.size() - 1;
break;
}
t2 = t1;
}
if (iLoca == 0)
{
cout<<" :";
cout<<iVal[0]<<".";
for (int i = 1; i != iVal.size(); ++i)
{
cout<<iVal[i];
}
}
else
{
cout<<" :";
cout<<iVal[0]<<".";
for (int i = 1; i != iVal.size(); ++i)
{
cout<<iVal[i];
}
cout<<" "<<iLoca<<" ";
}
cout<<endl;
return 1;
}