zoukankan      html  css  js  c++  java
  • 1316 你能知道这是几进制数?

    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;
    }
    
  • 相关阅读:
    mybatis(2)操作数据库
    《构建之法》阅读笔记02
    mybatis(4)使用注解方式配置sql语句
    mybatis(5)参数传递
    Android Studio安装
    《构建之法》阅读笔记01
    反射
    mybatis(3)利用Mapper接口实现数据的增删改查
    activity组件
    mybatis(1)
  • 原文地址:https://www.cnblogs.com/xxhao/p/14321964.html
Copyright © 2011-2022 走看看