华为笔试——C++消重输出

题目:消重输出

题目介绍:

输入一个正整数,给出消除重复数字以后最大的整数,注意需要考虑长整数。

例:

输入: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()) != '
')
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 省去。

原文地址:https://www.cnblogs.com/ljy1227476113/p/9610800.html