欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-09 22:02:39
题目:消重输出 题目介绍: 输入一个正整数,给出消除重复数字以后最大的整数,注意需要考虑长整数。 例: 输入:988274320 输出:9874320 题目分析:这个结果的实现需要两个步骤:消重和排序。第一步,消重。先用string 和char 将数字分别储存进char 数组,然后从左边第一个字符开 ......

题目:消重输出

题目介绍:

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

例:

输入: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 }

结果:

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

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