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];
}
}