c++ vector容器学习
判断一个真分数是无限循环还是无限不循环
#include<iostream>
#include<vector>
/*向量是一个封装了动态大小数组的顺序容器,跟任意其他类型的容器一样,它能够存放各种类型的对象。
可以简单地认为,向量是一个能够存放任意类型的动态数组*/
using namespace std;
int main()
{
int flag2;
do
{
int numer;//分子
int denom;//分母
cout << "请输入分子和分母: ";
cin >> numer >> denom;
while (numer >= denom)
{
cout << "输入错误!请重新输入!" << endl;
cout << "请输入分子和分母: ";
cin >> numer >> denom;
}
int flag1 = 0;
int remainder = (numer * 10) % denom;//余数
int quotient = int(numer * 10 / denom);//商
vector<int> v;//创建一个向量存储容器
v.push_back(quotient);//在数组的最后添加一个数据
int beg = 0;
int end = 0;
vector<int>::iterator iter, iter1;//声明两个迭代器,来访问vector容器,作用:遍历或者指向vector容器的元素
while (!flag1 && remainder)
{
quotient = int(remainder * 10 / denom);
remainder = (remainder * 10) % denom;
v.push_back(quotient);
if (v.size()> denom && beg == end)//v.size得到当前使用容器的大小 //容器长度大于分母但仍然不出现循环时,就不可能再出现循环了//
{cout<<"v.size() "<<v.size()<<endl;
break;}
else
{
if (beg == end)
{
for (iter = v.begin(); iter != v.end() - 1; iter++)//
{
if (*iter == v.back())
{
beg = iter - v.begin();
end = v.end() - v.begin();
break;
}
}
}
else {
iter = v.begin();
iter1 = iter + beg + (v.end() - v.begin()) - end;//
if (*iter1 != v.back())
beg = end = 0;
else if (iter1 == v.begin() + end)
flag1 = 1;
}
}
}
if (remainder == 0)
cout << "有限小数!\n";
else if (flag1 == 0)
cout << "无限但不循环小数!\n";
else
cout << "无限循环小数! 且循环区间开始的位置为 " << end - 1 << endl;
cout << "---------------------------------------------\n";
cout<< "是否继续判断循环,如果是,请输入1, 否则0: ";
cin >> flag2;
} while (flag2);
return 0;
}