牛客网-华为在线编程-009-提取不重复的整数(字符串)

来源:互联网 发布:今日热点是什么软件 编辑:程序博客网 时间:2024/06/05 10:28

题目描述

输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

输入描述:

输入一个int型整数

输出描述:

按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

示例1

输入

9876673

输出

37689
解题思路一:利用取模的方法来遍历一个整数的每一位;利用数组下标法来给已经存在的数字打标签,避免重复。

#include<iostream>using namespace std;int main(){    int n;    int a[10]={0};    int num=0;    cin>>n ;    while(n)    {        if(a[n%10]==0)        {            a[n%10]++;//这一步是更新,遇到下次相同的数会跳过            num=num*10+n%10;        }        n/=10;    }         cout<<num<<endl;         return 0;}

说明:程序中申请了一个数组a[10] = 0; 以此来给整数的每一位打标签,判断是否已经存在。

解题思路二:将数字输入为字符串,遍历字符串的每一位避免了取模操作;然后将每一位字符转换为数值型的作为数组下标,从而实现打标签的目的。

#include <iostream>#include <string>using namespace std;int main(){     int m, i;    int a[10] = {0};    string str;    getline(cin, str);    m = str.size();    for (i = m - 1; i >= 0; i--)    {        if (a[str[i] - '0'] == 0)        {            cout << str[i];            a[str[i] - '0']++;        }    }    return 0;}


说明:注意利用str[i] - '0' 的方法进行单个数字的字符到数值的转换,其中str[i] - '0' 的结果是ASCII码相减的结果,即相应的数字。

解题思路三:将一个整数当做一个字符串,然后遍历每一个字符,找到不重复的字符放到一个新的数组中,然后一个接一个比较下一个字符是否已经存在与新的数组中,这里运用了string.find()函数来判断是否重复,搜索操作的具体用法详见C++primer P325(额外的string操作)。该方法不但适用于整数的去重,还适用于字符串的去重,具有通用性。

#include <iostream>#include <string>using namespace std;int main(){    string s;    int i = 0;    cin>>s;    int n = 0;    n = s.size();    string str(s,n-1);    for(i=n-1;i>=0;i--)    {        if(str.find(s[i]) == -1)        {            str = str+s[i];        }            }    cout<<str;}

说明:注意str.find()的返回值,搜索操作返回指定字符出现的下标,如果未找到则返回npos,一般npos为-1,但也不是绝对的。













阅读全文
0 0