定义:数值序列中包含2~16进制整数,如果序列中有一个数,与序列中其他任何一个数大小都不相等,则这个数叫做“异数”。请找出给定数值序列中所有的“异数”. 输入 输入数值序列i行(0<i),每一行分别是进制和数值,以“#”分割。如:n#m, n是整数,代表n进制(1<n<17),m是n进制下的数值. 输入序列以结束符”END”结束. 输出 输出j行(0<j<=i),每一行都是输入序列的“异数”。要求: 1.按照输入序列的原序输出; 2.如果没有”异数”,输出字符串”None” 3.结束符“END”
#include<iostream>
#include <sstream>
#include<string>
#include<vector>
#include <math.h>
using namespace std;
int main()
{
string in;//输入序列
vector<string> vString(1000); //存储输入序列
vector<int> vInt(1000); //存储输入序列对应十进制值
bool h=false;
while(cin>>in)
{
if(in=="END")break; //输入序列以结束符"END"结束
stringstream ssw;
int w,tmp=0;
int l = in.size();//10#15长度
int n = in.find("#")+1; //10#15中"#"索引下一位
string bit = in.substr(0,n-1);//10#15中"#"前进制
string num = in.substr(n,l);//10#15中"#"后数值
ssw << bit;
ssw >> w;//字符串转数字
for(; n<l; ++n)
{
stringstream ssx;
int x;
ssx << in[n];
ssx >> x;//字符串转数字
tmp+=x*pow(w,l-1-n);// 得到十进制数值
}
vInt[tmp]++;//整形数组第tmp位叠加,等于1为异数
vString[tmp]=in;//字符串数组存储输入值
}
for(int i=0; i<20; ++i)
{
if(vInt[i]==1)
{
cout << vString[i] << endl;
h=true;//如果有"异数",不输出字符串"None"
}
}
if(!h)cout << "None" << endl;//如果没有"异数",输出字符串"None"
return 0;
}