资深天翼
90分求助
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
int n;
bool cmp(char a,char b){
return a>b;
}
string maxn(string a){
sort(a.begin(),a.end(),cmp);
return a;
}
string minn(string a){
sort(a.begin(),a.end());
return a;
}
int main(){
scanf("%d",&n);
while(n!=0||n!=6174){
string a;
stringstream b;
b<<n;
b>>a;
string mx=maxn(a);
string mn=minn(a);
stringstream bb;
bb<<mx;
int mxx;
bb>>mxx;
stringstream bbb;
bbb<<mn;
int mnn;
bbb>>mnn;
n=mxx-mnn;
printf("%s", mx);
printf(" - ");
printf("%s", mn);
printf(" = ");
printf("%d",n);
printf("\n");
if(n==6174||n==0) break;
}
return 0;
}
陈曦在2021-08-23 14:20:18追加了内容
@张皓轩
探索数字宇宙经验值:0
题目描述 Description
现有一个4位且各个位不完全相同的正整数n,若先将n这个正整数上的 4 个数字递减排序得到一个数a,再按递增排序得到一个数b,然后用a减b,将得到一个新的数字。一直重复,最终相减会得到6174,这个数字通常被黑洞之数。
例如,我们从7252开始,将得到:
7522 - 2257 = 5265
6552 - 2556 = 3996
9963 - 3699 = 6264
6642 - 2466 = 4176
7641 - 1467 = 6174
… …
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。
输入描述 Input Description
输入一个正整数n
输出描述 Output Description
若 n的 4 位数字全相等,则在一行内输出 n - n = 0000;
否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。
样例输入 Sample Input
样例输入1: 6767 样例输入2: 3333
样例输出 Sample Output
样例输出1: 7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 样例输出2: 3333 - 3333 = 0
数据范围及提示 Data Size & Hint
0<n<=10000
缔造者之神
先输入一个数n
再来一个**循环
取位数应该都会吧,最多是四位数,于是:
a[1]=b[1]=n%10/1;
a[2]=b[2]=n%100/10;
a[3]=b[3]=n%1000/100;
a[4]=b[4]=n%10000/1000;
数组记得在循环里面定义!
这样四位都知道了
再排个序,这个sort排序都会
a从小到大,b从大到小
排完之后变回四位数,怎么办呢?
int c=b[1]*1000+b[2]*100+b[3]*10+b[4],d=a[1]*1000+a[2]*100+a[3]*10+a[4];
输出要是四位数的格式,所以,我们不输出c,d,直接输出数组!!!!!
cout<<b[1]<<b[2]<<b[3]<<b[4]<<" - "<<a[1]<<a[2]<<a[3]<<a[4]
后面的差就是c-d了。
n=c-d
之后呢,就判断是不是6174或0就可以了,如果是,跳出**循环哦!
望采纳!