代码
#include <iostream>
#include <sstream>
using namespace std;
string intToString(int t) {
stringstream ss;
ss<<t;
string tmp;
ss>>tmp;
while(tmp.length()<4) {
tmp = "0" + tmp;
}
return tmp;
}
int stringToInt(string t) {
stringstream ss;
ss<<t;
int tmp;
ss>>tmp;
return tmp;
}
string findMin(string s) {
for(int i=0; i<s.length(); i++) {
for(int j=i+1; j<s.length(); j++) {
if(s.at(i)>s.at(j)) {
char c = s.at(j);
s[j] = s[i];
s[i] = c;
}
}
}
return s;
}
string findMax(string s) {
for(int i=0; i<s.length(); i++) {
for(int j=i+1; j<s.length(); j++) {
if(s.at(i)<s.at(j)) {
char c = s.at(j);
s[j] = s[i];
s[i] = c;
}
}
}
return s;
}
int main() {
int n;
cin>>n;
string str = intToString(n);
do{
string min = findMin(str);
string max = findMax(str);
str = intToString(stringToInt(max)-stringToInt(min));
cout<<max<<" - "<<min<<" = "<<str<<endl;
}while(str.compare("6174")!=0 && str.compare("0000")!=0);
return 0;
}
注解
1、有一个坑点,输入本身是6174,应该输出7641 - 1467 = 6174,因此必须用do while循环,如果用while循环,此处直接就输出了,有一个case错误!
2、本题学到的语法:
(1)int与string的互相转换,利用stringstream作桥。
(2)string中按字节排序,类似于java中的Arrays.sort(char[]),本代码里采用的是选择法排序,同样也可用冒泡法或其他排序方法。