题目描述
小雷今天要写加法题啦!
老师在黑板上写了一个加法式子,小雷想用他喜欢的方式写出来。
小雷喜欢从大到小写下自己的算式并算出答案。
你得到了黑板上的式子,请你用小雷喜欢的方式写出来并计算出答案。
输入描述:
一行一个字符串(仅由加法符号以及数字组成)。
输出描述:
第一行一个字符串是符合小雷喜好的式子。
第二行一个数字是这个算式的答案。
示例1
输入
1+2+3+1
输出
3+2+1+1 7
备注:
算式的答案的不超过2^31−1。
字符串的长度不超过2∗10^5。
代码实现:
#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
string s;
cin>>s;
int num=0;
vector<int> ss;
int len=s.size();
for(int i=0;i<len;i++){
if(s[i]=='+'){ //遇到 +号就将累加的num放入数组中再置0,开始下一次
ss.push_back(num);
num=0;
}
else{
num*=10;
num+=s[i]-'0';
}
}
ss.push_back(num); //将最后一个数字加入数组中
sort(ss.begin(),ss.end(),cmp);
int len1=ss.size();
int ans=0;
for(int i=0;i<len1;i++){
if(i!=len1-1) cout<<ss[i]<<'+';
else cout<<ss[i]<<endl;
ans+=ss[i];
}
cout<<ans<<endl;
return 0;
}