0113 - Period

#include <algorithm>
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;

void Slove(int p, int q)	{
	int index=-1;
	vector<int> vec;
	map<int,int> remain;

	remain[p%q]=0;
	p*=10;
	for (int i=0; i<80; ++i)	{
		vec.push_back(p/q);
		if ( !(p%q) )	break;
		else if ( remain.find(p%q) != remain.end() )	{
			index=remain[p%q];
			break;
		}
		remain[p%q]=i+1;
		p=p%q*10;
	}
	for (int i=0; i<vec.size(); ++i)
			cout << vec[i];
		cout << endl;
	if (index != -1)	{
		for (int i=0; i<vec.size(); ++i)
			cout << (i<index? " " : "^");
		cout << endl;
	}
}

int main(void)	{
	int p, q;

	while (cin >> p >> q)
		Slove(p,q);
	return 0;
}

やるだけ問題。