中级光能
1214 数字顺序重构
经验值:800 时间限制:1000毫秒
题目描述 Description
任意输入一个正整数(位数不超过15位),取出其中的每一位数,用一个数组保存,并按照其各位数从小到大排列,将其重构组成一个新的数,输出该整数。
(注:输出的是一个整数,而不是一个数组)
输入描述 Input Description
输入为一行,表示一个位数不超过15的正整数。
输出描述 Output Description
输出为一行,表示经过顺序重构之后得到的新数。
样例输入 Sample Input
645312
样例输出 Sample Output
123456
数据范围及提示 Data Size & Hint
输出的整数首位不能为0哦
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,a[105],ge,res,i=1;
cin>>n;
while(n){
ge=n%10;
n=n/10;
res=res*10+ge;
a[i]=res;
i++;
}
sort(a,a+i,cmp);
int s;
for (int j=1;j<=i;j++){
s=s*10+a[j];
}
cout<<s;
return 0;
}
//cout<<fixed<<setprecision(1)<<v;
咋拆数字啊?
高舒豪在2021-05-17 18:31:55追加了内容
又咋存数组里啊
资深光能
我通过网上查询,循环取位数终于懂了!!!
另外,取位数还有一个网站循环取位数讲义
李子杰在2021-05-18 17:20:43追加了内容
思路:
李子杰在2021-05-18 17:28:02追加了内容
1.定义 int类型,b[20],i;
定义long long类型a;
并输入a。
2.while(a){
3.i++;
4.取位数 :b[i]=a%10; a/=10;
}
5.sort(a+1,a+n+1);
6. for(int j=1;j<=i;j++){
7.如果(b[j]==0)continue;
8.输出<<b[j];
}
祝您满分愉快!!!
修练者
int main(){
//定义long long数组 ans=0,n,a[20],i1=1,s=0;
cin>>n;
while(1){ |
if(n>=10){ |
a[i1]=n%10; |
n/=10; |
i1++; |
}if(n<10){ |循环取位数
a[i1]=n%10; |
break; |
} |
} |
for(int i=1;i<=i1-1;i++){ |
for(int j=i+1;j<=i1;j++){|
if(a[i]<a[j]){ |
int t=a[i]; |
a[i]=a[j]; |排序(选择)
a[j]=t; |
} |
} |
} |
for(int j=i1;j>=1;j--){ /
//ans+=a[j]*pow(10,i1-j+1); /
if(a[j]) /输出操作
cout<<a[j]; /
} /
return 0;
}
看在同学的份上,采纳一下吧!!!
中级天翼
字符串轻松水过
代码:
cin>>s;
sort(s.begin(),s.end());
while(s[0]=='0') s.erase(0,1);
for(int i=0;i<s.size();i++)
cout<<s[i];
资深光能
sort函数 课后讲义
知识点:sort()
排序
sort()
默认从小到大排序
加头文件#include<algotithm>
数组长度为n,
给a[1] a[2] a[3]......a[n]
这n 个数排序
sort(a+1,a+n+1);
给a[0] a[1] a[2]......a[n-1]
这n 个数排序
sort(a,a+n);
sort()
自定义函数cmp,实现从大到小排序
bool cmp(int a,int b) {
return a>b;
}
int a[100005];
int main(){
int n; cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++) cout<<a[i]<<' ';
return 0;
}