poj1350 一个模拟

一个很有意思的结论,给出一个四位数,若每位不都是一样的,各个位从大到小,从小到大排,再相减。如此循环,最后一定是以0或6174结束。

注意,若不是四位数,直接判断no。

#include <iostream> #include <string> using namespace std; bool same(string s) { bool f=true; for (int i=1;i<s.length();i++) if (s[i]!=s[0]) f=false; return f; } int trans(string s) { int t=0; for (int i=0;i<s.length();i++) t=t*10+s[i]-'0'; return t; } string sort1(string s) { for (int i=0;i<s.length()-1;i++) for (int j=i+1;j<s.length();j++) if (s[i]<s[j]) swap(s[i],s[j]); return s; } string sort2(string s) { for (int i=0;i<s.length()-1;i++) for (int j=i+1;j<s.length();j++) if (s[i]>s[j]) swap(s[i],s[j]); return s; } string tostring(int t) { string s="",s1=""; if (t==0) return "0"; while (t) { int r=t%10; s+=(char)(r+48); t/=10; } for (int i=s.length()-1;i>=0;i--) s1+=s[i]; return s1; } int main() { string s; while (cin >> s && s!="-1") { cout << "N=" << s << ":" << endl; if (same(s) || s.length()!=4) cout << "No!!" << endl; else { int t=0; while (1) { if (s=="0" || s=="6174") break; t++; int a=trans(sort1(s)); int b=trans(sort2(s)); cout << a << "-" << b << "=" << a-b << endl; s=tostring(a-b); } cout << "Ok!! " << t << " times" << endl; } } //system("pause"); return 0; }

你可能感兴趣的:(poj1350 一个模拟)