PAT-乙-1019 1019 数字黑洞 (20 分)

在这里插入图片描述
在这里插入图片描述

代码

#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[]),本代码里采用的是选择法排序,同样也可用冒泡法或其他排序方法。

结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhanggirlzhangboy/article/details/82936026