1. 题目介绍
2. 思路
一直以为输入的数肯定是四位正整数,所以一开始创建了大小为4的数组。后来发现输入的数字位数不确定,所以用int或string比较好。由于要排序,用int输入的话,也要再放到数组里。
3. 具体代码实现
ac代码
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main() {
int n;
cin >> n; //用int读取正整数
int n1[4];
int max,min;
do {
for (int i = 0; i < 4; i++) { //将正整数放入数组中
n1[i] = n % 10;
n /= 10;
}
max=0,min=0;
sort(n1, n1 + 4, cmp); //非递增排序
for (int i = 0; i < 4; i++) //将数组转换为正整数
max = max * 10 + n1[i];
sort(n1, n1 + 4); //非递减排序
for (int i = 0; i < 4; i++) //将数组转换为正整数
min= min * 10 + n1[i];
n = max - min; //求差
printf("%04d - %04d = %04d\n",max,min, n);
} while (n != 6174&&n!=0);
return 0;
}
?学习代码
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
bool cmp(char a, char b) {return a > b;}
int main() {
string s;
cin >> s;
s.insert(0, 4 - s.length(), '0'); //insert()用于补0
do {
string a = s, b = s;
sort(a.begin(), a.end(), cmp); //字符串排序,使用begin(),end()
sort(b.begin(), b.end());
int result = stoi(a) - stoi(b); //(stoi(字符串,起始位置,n进制),将 n 进制的字符串转化为十进制
s = to_string(result); //to_string()将整数转换为字符串
s.insert(0, 4 - s.length(), '0');
cout << a << " - " << b << " = " << s << endl;
} while (s != "6174" && s != "0000");
return 0;
}
4. 收获
- insert()可用于补0
- 字符串排序使用sort(s.begin(),s.end(),cmp)
- stoi(字符串,起始位置,n进制),将 n 进制的字符串转化为十进制
|