题目:消重输出
题目介绍:
输入一个正整数,给出消除重复数字以后最大的整数,注意需要考虑长整数。
例:
输入:988274320
输出:9874320
题目分析:这个结果的实现需要两个步骤:消重和排序。第一步,消重。先用string 和char 将数字分别储存进char 数组,然后从左边第一个字符开始逐个向右边比较,如果有相同的字符就将左边的置换成 ‘a’ ,这样多次次循环过后988274320就变成了9a8a74320,因为是向右比较且只变换左边字符,因此a 不会重复。第二步,排序。就是循环比较,大的字符向右靠即可。
代码:
1 #include <iostream>
2 #include <string>
3 #include <math.h>
4 #include <conio.h>
5 using namespace std;
6 int main()
7 {
8 int size;
9 cout << "请输入位数:" << endl;
10 cin >> size;
11 int i = 0,j = 0,n = 0;
12 int count = 0;
13 long result = 0;
14 char c;
15 char *p = new char[size];
16 cout << "请输入" << size << "位正整数" << endl;
17 while ((c = _getch()) != '\r')
18 {
19 if (c >= '0'&&c <= '9')
20 {
21 p[count] = c;
22 cout << c;
23 count++;//字符形式存储在数组里
24 }
25 }
26 for (i = 0; i < size; i++)
27 {
28 for (j = 0; j < size; j++)
29 {
30 if (p[i] == p[j] && i < j)
31 {
32 p[i] = 'a';//重复的数字,左边的变成a
33 n++;//每有一个重复的,n++
34 }
35 }
36 }
37 cout << endl;
38 for (i = 0; i < size;i++)
39 {
40 cout << p[i];
41 }
42 cout << endl;
43 for (i = 0; i < size; i++)
44 {
45 for (j = 0; j < size; j++)
46 {
47 if (p[i] < p[j] && i < j)
48 {
49 count = p[i];
50 p[i] = p[j];
51 p[j] = count;//数字大的排前面
52 }
53 }
54 }
55 cout << n << endl;
56 for (i = 0; i < size; i++)
57 {
58 cout << p[i];
59 }
60 cout << endl;
61 for (i = 0; i < size; i++)
62 {
63 if (i >= n)//输出除了a之外的数字
64 {
65 cout << p[i];
66 result += (int(p[i])-48) * int(pow(10, size - i - 1));//转换成正整数
67 }
68 }
69 cout << endl << result << endl;
70 return 0;
71 }
结果:

其中输入位数这一步可用string 与 char 的strcpy 省去。