当前位置 : 主页 > 编程语言 > java >

PAT甲级1069

来源:互联网 收集:自由互联 发布时间:2022-09-02
1069. The Black Hole of Numbers (20) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue For any 4-digit integer except the ones with all the digits being the same, if we sort the digi


1069. The Black Hole of Numbers (20)


时间限制

100 ms

内存限制

65536 kB

代码长度限制

16000 B

判题程序

Standard

作者

CHEN, Yue


For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in non-increasing order first, and then in non-decreasing order, a new number can be obtained by taking the second number from the first one. Repeat in this manner we will soon end up at the number 6174 -- the "black hole" of 4-digit numbers. This number is named Kaprekar Constant.

For example, start from 6767, we'll get:

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...

Given any 4-digit number, you are supposed to illustrate the way it gets into the black hole.

Input Specification:

Each input file contains one test case which gives a positive integer N in the range (0, 10000).

Output Specification:

If all the 4 digits of N are the same, print in one line the equation "N - N = 0000". Else print each step of calculation in a line until 6174 comes out as the difference. All the numbers must be printed as 4-digit numbers.


Sample Input 1:


6767


Sample Output 1:


7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174


Sample Input 2:


2222


Sample Output 2:


2222 - 2222 = 0000




#include<iostream>
#include<algorithm>//用sort
#include<math.h>//用于指数
using namespace std;

bool compare(int a, int b)
{
return a > b;
}//用于降序排序
int* kaprekar(int *a)
{

int b[4];
for (int i = 0; i < 4; i++)
{
b[i] = a[i];
}
sort(a, a + 4);//升序
sort(b, b + 4, compare);//降序
int sum1 = 0, sum2 = 0;
for (int i = 3; i >=0; i--)
{
sum1 += a[i] * pow(10, 3 - i);
sum2 += b[i] * pow(10, 3 - i);
}
cout << b[0] << b[1] << b[2] << b[3];
cout << " " << "-" << " ";
cout << a[0] << a[1] << a[2] << a[3];
int temp = sum2 - sum1;
for (int i = 3; i >= 0; i--)
{
a[i] = temp % 10;
temp = temp / 10;
}
cout << " " << "=" << " ";
cout << a[0] << a[1] << a[2] << a[3]<<endl;

return a;
}
int main()
{
int a1;
cin >> a1;
int *a = new int[4];
for (int i = 3; i >= 0; i--)
{
a[i] = a1 % 10;
a1 = a1 / 10;
}
int temp = 0;
while (true)
{
if (temp != 6174)
{
a = kaprekar(a);
temp = 0;
for (int i = 3; i >= 0; i--)
{
temp += a[i] * pow(10, 3 - i);
}
if (temp == 0 || temp == 6174)
break;
}

}
return 0;
}


上一篇:PAT甲级1024
下一篇:没有了
网友评论