输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
输入一个int型整数
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数
示例1解题思路二:将数字输入为字符串,遍历字符串的每一位避免了取模操作;然后将每一位字符转换为数值型的作为数组下标,从而实现打标签的目的。
#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,但也不是绝对的。