西安电子科技大学上机题(一)

题目: 编写一个程序,从键盘输入 n 个非零常数(0 < n < 1000),将这 n 个数中每个数的各位数字取出来相加,并按照从小到大的次序输出这些数字和。

输入格式:

1
输入的整数之间以空格分割,输入为 0 时结束

输出格式:

1
在一行上从小到大输出计算结果,整数之间用一个空格分割,最后换行

输入样例:

1
56 12 789 521 0

输出样例:

1
3 8 11 24

思路:

  • 先获取内存缓冲区中的输入值,对得到的空格分隔的字符串一个一个进行处理。
  • 将每个字符串按索引相加,得到值,并存入向量中。
  • 对向量进行排序。
  • 按照固定格式输出向量里面的值

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<bits/stdc++.h>
using namespace std;

int main(void) {
string s;
vector<int> res;
while((cin >> s) && s != "0") {
int val = 0;
// 56 12 789 521 0
for(int i = 0; i<s.length(); i++)
val += s[i] - '0';
res.push_back(val);
}
sort(res.begin(), res.end());
vector<int>::iterator t;
for(t = res.begin(); t != res.end(); t++)
cout << *t << ' ';
return 0;
}