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; }