Luoyoooo

与其感慨路难行,不如马上出发

[数字逻辑模拟]7-3 卡布列克常数(2010慈溪) (20分)

最近,小博在数学兴趣课中了解了“卡布列克常数”。卡布列克是一位数学家,他在研究数字时发现:任意一个不是用完全相同数字组成的四位数,如果对它们的每位数字重新排序,组成一个最大的数和一个最小的数,然后用最大数减去最小数,差不够四位数时补零,类推下去,最后将变成一个固定的数:6174,这就是卡布列克常数。   例如:4321-1234=3087      8730-378=8352      8532-2358=6174      7641-1467=6174 …… 小博想,我能不能编程来验证呢?输入一个符合条件的四位数,然后验证运算过程。

输入格式:

共1行,为任意一个不是用完全相同数字组成的四位数。

输出格式:

变为卡布列克常数的运算过程,由若干行组成,每行是一个算式,不含空格。

输入样例:

4321

输出样例:

4321-1234=3087
8730-378=8352
8532-2358=6174

思路:按题目意思来即可,没啥规律

           注意min的值可能为三位数的情况

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 using namespace std;
 5 int main()
 6 {
 7     string s;
 8     int min = 0, max = 0, tmp = 0;
 9     cin >> s;
10     while (max - min != 6174)
11     {
12         sort(s.begin(), s.end());
13         if (s[0] == 0)
14         {
15             min = (s[1] - '0') * 100 + (s[2] - '0') * 10 + s[3] - '0';
16         }
17         else
18         {
19             min = (s[0] - '0') * 1000 + (s[1] - '0') * 100 + (s[2] - '0') * 10 + s[3] - '0';
20         }
21         max = (s[3] - '0') * 1000 + (s[2] - '0') * 100 + (s[1] - '0') * 10 + s[0] - '0';
22         tmp = max - min;
23         printf("%d-%d=%d\n", max, min, tmp);
24         s=to_string(tmp);
25     }
26 }

 

posted @ 2020-02-04 16:58  Luoyoooo  阅读(406)  评论(0编辑  收藏  举报