wizen-coder
9/30/2018 - 12:44 PM

定义:数值序列中包含2~16进制整数,如果序列中有一个数,与序列中其他任何一个数大小都不相等,则这个数叫做“异数”。请找出给定数值序列中所有的“异数”. 输入 输入数值序列i行(0<i),每一行分别是进制和数值,以“#”分割。如:n#m, n是整数,代表n进制(1<n<17),m

定义:数值序列中包含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;
}