您的位置:首页 > 大数据 > 人工智能

Aizu 1180 Recurring Decimals

2012-07-21 17:35 162 查看
Aizu 1180 Recurring Decimals



看到字符串就头疼啊。。。。

超麻烦





//Aizu 1180 Recurring Decimals
//字符串 
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
string aaaa[7]={
	"0","0","00","000","0000","00000","000000"
};

bool ba(char a, char b)
{ 
	return a>b;
}
bool ab(char a, char b)
{ 
	return a<b;
}

string Sub(string a,string b)                  //计算 a-b 
{
	string c=a;
	int lena=a.length(),lenb=b.length(),lenc,i,j;
	for(i=lena-1,j=lenb-1;j>=0;j--,i--)
	{
		c[i]='0'+a[i]-b[j];
	}
	lenc=c.length();
	for(i=lena-1;i>0;i--)
	{
		if(c[i]<'0')
		{
			c[i]+=10;
			c[i-1]--;
		}
	}
//	cout<<"c="<<c<<endl;
//	cout<<c<<endl;
	return c;
}

string fun(string x)                  //由 a【i】计算a【i+1】 
{
	string a,b,c;
	sort(x.begin(),x.end(),ba);           //从大到小排序 
	a=x;
	sort(x.begin(),x.end(),ab);           //从小到大排序 
	b=x;
	return Sub(a,b);
}

int main()
{
	string x,a[101];
	int i,j,k,l,L,flag,lenx;
	
	while(cin>>x>>L)
	{
		if(x=="0"&&L==0) break;
		lenx=x.length();
		if(lenx<L)
		{
			x=aaaa[L-lenx]+x;
		}
		//得到了 a0
		a[0]=x;
		flag=0;
		for(i=1;i<=100;i++)
		{
			a[i]=fun(a[i-1]);
			for(j=0;j<i;j++)
			{
				if(a[j]==a[i])
				{
					flag=1;
					break;
				}
			}
			if(flag) break;
		}
		//-----------------------------------------------------------------------
		//                              清空a[i]中没有意义的'0' 
		bool flag=0;
		for(k=0;k<a[i].length();k++)
		{
			if(a[i][k]!='0')
			{
				flag=1;                             //a[i]!=0 
			//	if(k==0) break;
				for(l=0;k<a[i].length();l++,k++)
				{
					a[i][l]=a[i][k];
				}
				a[i]=a[i].erase(l,a[i].length()-l);
				break;
			}
		}
		if(flag==0) a[i]="0";
		//------------------------------------------------------------------------
		cout<<j<<" "<<a[i]<<" "<<i-j<<endl;
	}
	return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: