6174问题

捕获


 1 //--------------------C_Style----------------------
 2 
 3 #include<stdio.h>
 4 #include<string.h>
 5 const int maxn = 3000;
 6 
 7 int get_next(int n)
 8 {
 9     char str[10];
10     sprintf(str, "%d", n);        //将%d的n转换成字符串存入到str中
11     int size = strlen(str);
12     for(int ix = 1; ix != size; ++ix)        //降序
13     {
14         int key = str[ix], index = ix -1;
15         for(; index >=0 && str[index] < key; --index)
16             str[index+1] = str[index];
17         str[index+1] = key;
18     }
19     int a = 0;
20     sscanf(str, "%d", &a);        //将字符串str转换成%d,存入到a中
21     int index = size-1;
22     for(ix = 0; ix < size/2, index >= size/2; ++ix, --index)
23     {
24         int t;
25         t = str[ix];
26         str[ix] = str[index];
27         str[index] = t;
28     }
29     int b = 0;
30     sscanf(str, "%d", &b);
31     return a-b;
32 }
33 int main()
34 {
35     int n;
36     scanf("%d", &n);
37     printf("%d", n);
38     while(get_next(n) !=n)
39     {
40         printf("->%d", get_next(n));
41         n = get_next(n);
42     }
43     printf("->%d\n", n);
44     return 0;
45 }
 1 //------------------------------------C++_Style---------------------------------------------
 2 #include<iostream>
 3 #include<vector>
 4 #include<sstream>
 5 using namespace std;
 6 
 7 int getnext(int n)
 8 {
 9     string str;
10     stringstream stream;
11     stream << n;       //将n读入流stream中
12     stream >> str;      //将n存入string对象中(相当于将整型转化为string)
13     stream.clear();     //重置stream内部状态
14     for(string::size_type i = 1; i != str.size(); ++i)      //升序排序,得到最小值
15     {
16         char key = str[i];
17         string::size_type j = i-1;
18         for(; j >= 0 && str[j] > key; --j)
19             str[j+1] = str[j];
20         str[j+1] = key;
21     }
22     stream.str("");     //清空stream对象
23     stream << str;      //将string对象存入整型
24     int min;
25     stream >> min;      //将string转化为整型
26     stream.clear();
27     stream.str("");
28     //倒置stream对象得到最大值
29     for(string::size_type i = 0, j = str.size()-1; i < str.size()/2; ++i, --j)
30     {
31         char t;
32         t = str[i];
33         str[i] = str[j];
34         str[j] = t;
35     }
36     stream << str;
37     int max;
38     stream >> max;  //转化成整型数
39     return max - min;
40 }
41 
42 int find(const vector<int> &ivec, int n)        //查找是否已存在
43 {
44     for(vector<int>::size_type i = 0; i != ivec.size()-1; ++i)
45         if(ivec[i] == n)
46             return 1;
47     return 0;
48 }
49 int main()
50 {
51     int n;
52     vector<int> ivec;
53     while(cin >> n)
54     {
55         ivec.push_back(n);
56         cout << n;
57         while(!find(ivec, getnext(n)))
58         {
59             cout << "->" << getnext(n);
60             ivec.push_back(getnext(n));
61             n = getnext(n);
62         }
63     }
64     return 0;
65 }
原文地址:https://www.cnblogs.com/sanghai/p/2768310.html