PAT (Basic Level) Practice 1019 数字黑洞

乙级1019
在这里插入图片描述

1.必须格式输出,用int的话不方便,建议用char[4]
2.由于必须是最大减最小,所以输入数意义并不大(输入1234和1243结果都是一样),都要进行一次变大的排序和变小的排序
3.输入是0~9999,并不是只是四位,需留意(被坑了一次,会报超时)
4.字符相减出来的ascii码直接是结果,要正确保存的话需要再添加一个’0’

#include<stdio.h>
#include<iostream>
#include<cstring>
#include <stdlib.h>
using namespace std;
void tomax(char *a);
void tomin(char *a);
void subtraction(char *max,char *min,char* c);
char ma[4];
char mi[4];
int main(){
	char c[4];
	cin>>c;
	int clen = strlen(c);
	for(int i = clen;i<4;i++){//易错点 
		c[i] = '0';
	}
	int ic;
	while(true){
		tomax(c);
		tomin(c);
		for(int i = 0;i<4;i++){
			cout<<ma[i];
		} 
		cout<<" - ";
		for(int i = 0;i<4;i++){
			cout<<mi[i];
		}
		cout<<" = ";
		subtraction(ma,mi,c);
		for(int i = 0;i<4;i++){
			cout<<c[i]; 
		}
		cout<<endl;
		if((c[0]=='6'&&c[1]=='1'&&c[2]=='7'&&c[3]=='4')||(c[0]=='0'&&c[1]=='0'&&c[2]=='0'&&c[3]=='0'))
			break;
	}

	return 0;
} 
void subtraction(char *max,char *min,char *c){
	for(int i = 3;i >= 0 ;i--){
		if(max[i]<min[i]){
			max[i-1] -= 1;
			c[i] = max[i] - min[i] + 10 + '0';
		}else{
			c[i] = max[i] - min[i] + '0';
		}
	}
}
void tomax(char *a){
	for(int i = 0;i<3;i++){
		for(int j = i;j<4;j++){
			if(a[i]<a[j]){
				swap(a[i],a[j]);
			}
		}
	}
	for(int i = 0;i<4;i++){
		ma[i] = a[i];
	}
}
void tomin(char *a){
	for(int i = 0;i<3;i++){
		for(int j = i;j<4;j++){
			if(a[i]>a[j]){
				swap(a[i],a[j]);
			}
		}
	}
	for(int i = 0;i<4;i++){
		mi[i] = a[i];
	}
}

猜你喜欢

转载自blog.csdn.net/a656418zz/article/details/83550262