1. 数字检测
题目ID:20317必做题100分
最新提交:
Wrong Answer
90 分
历史最高:
Wrong Answer
90 分
时间限制: 1000ms
空间限制: 524288kB
题目描述
作为一个学渣的鱼大大在学习了进制数之后,经常会写错进制数,导致他在做题的时候经常出现,写到了最后发现数字是错的情况,非常浪费时间。所以他迫切地想要一位大聪明随时随刻能帮他检测一下他写的nn进制数到底是不是对的。现在鱼大大给出了一个nn进制的数mm,问此进制数是否合法。
注:大于10进制的数,超过9的数字分别用大写字母A ~ Z
表示
输入格式
第一行两个整数,分别表示nn进制和nn进制下的数mm;
保证输入数据只包含数字和字母。
输出格式
如果合法,输出将其转成十进制后的数字。
如果不合法,将不合法的那个数字以及位置输出(若有多个不合法的数字分成多行输出)
样例
Input 1
16 129AFGH
Output 1
6 G 7 H
Input 2
8 127
Output 2
87
样例解释
【样例1说明】
16进制数的基本数字为0123456789ABCDEF;
不可能出现第6位的G和第7位的H,所以这两数字不合法。
【样例2说明】
8进制数的基本数字为01234567,127中的3个数字均合法,将其转成10进制后为87
数据范围
2≤n≤352≤n≤35
保证合法的mm转成十进制后不超过230230
#include<vector>
#include<cstdio>
#include<cstring>
#include <cassert>
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <ccomplex>
#include <cfenv>
#include <cinttypes>
#include <cstdalign>
#include <cstdbool>
#include <cstdint>
#include <ctgmath>
#include <cuchar>
#include <cwchar>
#include <cwctype>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#include <array>
#include <atomic>
#include <chrono>
#include <codecvt>
#include <condition_variable>
#include <forward_list>
#include <future>
using namespace std;
#define int long long
const int N = 114514;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
bool check(char c, int x)
{
if (isdigit(c))
{
return (c - '0') < x;
}
else if (isalpha(c))
{
return (toupper(c) - 'A' + 10) < x;
}
return false;
}
int f(char c)
{
if (isdigit(c))
{
return c - '0';
}
else if (isalpha(c))
{
return toupper(c) - 'A' + 10;
}
return 0;
}
signed main()
{
int n;
string m;
cin >> n >> m;
int v = 0;
bool flag = true;
string s;
int index
= 0;
for (int i = 0; i < m.size(); ++i)
{
if (!check(m[i], n))
{
flag = false;
s += m[i];
}
else
{
int value = f(m[i]);
v = v * n + value;
}
}
if (flag)
{
cout << v << endl;
}
else {
for (int i = 0; i < m.size(); ++i)
{
if (!check(m[i], n))
{
cout << index + 1 << " " << m[i] << endl;
}
if (isdigit(m[i]) || isalpha(m[i]))
{
index++;
}
}
}
return 0;
}