数字检测90分求调

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;
}

5 个赞

siliao

1 个赞

?

1 个赞

??

5 个赞

siliao
哦~我懂了 我撤回

1 个赞

私聊

1 个赞

私聊

1 个赞

谁帮我改一下

5 个赞

siliao

2 个赞