ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1316 你能知道这是几进制数?

2021-01-24 19:35:43  阅读:154  来源: 互联网

标签:1316 进制 mmax int long 输出 && 知道


1316 你能知道这是几进制数?

题目描述

有个比较特别的随机数生成器,你输入一个十进制数N,他会生成一个0到N-1之间的M进制数,但是你不知道这是一个M进制数,问你能猜测这是几进制数,升序输出所有的可能?

输入要求

第一行一个N(1< N < 10^9),代表输入的十进制数,第二行是一个小于10位的数(字符串表示),每个数位由0-9,a-z,A-Z表示0-61.所以最大进制就是62。

输出要求

输出一行,升序输出所有可能的进制可能(数字表示,每两个进制之间空格隔开,最后没空格),如果没有一种进制可能,输出“Machine is broken”。

测试数据

//输入
100
5e

//输出
15 16 17

AC代码

也是比较坑的题目了= =

  • 注意算进制数的时候要用long long int(_int64),int会爆掉
#include <bits/stdc++.h>
using namespace std;
long long int find(string s,int n)
{
	long long int res=0,num=1,temp;
	for(int i=s.size()-1;i>=0;i--)
	{
		if(s[i]>='A' && s[i]<='Z') temp=s[i]-'A'+36;
		if(s[i]>='a' && s[i]<='z') temp=s[i]-'a'+10;
		if(s[i]>='0' && s[i]<='9') temp=s[i]-'0';
		res+=num*temp;
		num=num*n;
	}
	return res;
}
int main() {
	int n,mmax=-1,f=0;
	string s;
	cin>>n;
	cin>>s;
	for(int i=0;i<s.size();i++)
	{
		if(s[i]>='A' && s[i]<='Z') 
		{
			if(s[i]-'A'+36>mmax) mmax=s[i]-'A'+36;
		}
		if(s[i]>='a' && s[i]<='z') 
		{
			if(s[i]-'a'+10>mmax) mmax=s[i]-'a'+10;
		}
		if(s[i]>='0' && s[i]<='9') 
		{
			if(s[i]-'0'>mmax) mmax=s[i]-'0';
		}
	}
	if(mmax<=1) mmax=1;//有没有这句话都能ac,我认为没有1进制,所以我加了 
	for(int i=mmax+1;i<63;i++)
	{
		if(find(s,i)<n) 
		{
			if(f) cout<<" ";f=1;
			cout<<i;
		}
	}
	if(f==0) cout<<"Machine is broken";
	cout<<endl;
	return 0;
}

标签:1316,进制,mmax,int,long,输出,&&,知道
来源: https://www.cnblogs.com/xxhao/p/14321964.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有