1 solutions
-
0
C++ :
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; #define N 10000 long long GetMax(const long long& num, const int& k); long long GetMin(const long long& num, const int& k); int AscComp(const char& a, const char& b); int DesComp(const char& a, const char& b); int main() { long long szRes[N] = {0L}; int n = 0; while (cin >>n) { memset(szRes, 0, sizeof(szRes)); szRes[0] = n; long long num = (long long)n; int k = log10(num) + 1; long long max = 0L, min = 0L; int pos = 1; int nStart = 0, nEnd = 0; bool bFind = false; while (!bFind) { max = GetMax(num, k); min = GetMin(num, k); num = max - min; for (int i = 0; i < pos; ++i) { if (num == szRes[i]) { nStart = i; nEnd = pos - 1; bFind = true; break; } } szRes[pos++] = num; } cout <<szRes[nStart]; for (int i = nStart + 1; i <= nEnd; ++i) { cout <<' ' <<szRes[i]; } cout <<endl; } return 0; } long long GetMax(const long long& num, const int& k) { if (num == 0) return 0; char szNum[12] = "\0"; long long nMaxNum = 0; sprintf(szNum, "%lld", num); // 补充0 int len = strlen(szNum); while (len < k) { szNum[len++] = '0'; } sort(szNum, szNum + k, DesComp); sscanf(szNum, "%lld", &nMaxNum); return nMaxNum; } long long GetMin(const long long& num, const int& k) { if (num == 0) return 0; char szNum[12] = "\0"; long long nMinNum = 0; sprintf(szNum, "%lld", num); // 补充0 int len = strlen(szNum); while (len < k) { szNum[len++] = '0'; } sort(szNum, szNum + k, AscComp); // 处理首位是0的情况 /*if (szNum[0] == '0') { int i = 1; while (szNum[i] == '0') ++i; szNum[0] = szNum[0] ^ szNum[i]; szNum[i] = szNum[0] ^ szNum[i]; szNum[0] = szNum[0] ^ szNum[i]; }*/ sscanf(szNum, "%lld", &nMinNum); return nMinNum; } int AscComp(const char& a, const char& b) { return a < b; } int DesComp(const char& a, const char& b) { return a > b; }
- 1
Information
- ID
- 20182
- Time
- 1000ms
- Memory
- 64MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By