解題心得
照著題目敘述做就好。
程式碼
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int descending(int n)
{
int arr[10] = { 0 }, ans = 0;
while (n)
{
arr[n % 10]++;
n /= 10;
}
for (int i = 9; i >= 0; i--)
{
while (arr[i] != 0)
{
ans = ans * 10 + i;
arr[i]--;
}
}
return ans;
}
int ascending(int n)
{
int arr[10] = { 0 }, ans = 0;
while (n)
{
arr[n % 10]++;
n /= 10;
}
for (int i = 0; i < 10; i++)
{
while (arr[i] != 0)
{
ans = ans * 10 + i;
arr[i]--;
}
}
return ans;
}
int main()
{
int n;
while (cin >> n && n)
{
vector<int> v;
cout << "Original number was " << n << endl;
while (true)
{
int ascend = ascending(n), descend = descending(n), result = descend - ascend;
cout << descend << " - " << ascend << " = " << result << endl;
if (v.size() != 0 && find(v.begin(), v.end(), result) != v.end())
break;
v.push_back(result);
n = result;
}
cout << "Chain length " << v.size() + 1 << endl << endl;
}
return 0;
}
沒有留言:
張貼留言