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;
    }
    
  • 相关阅读:
    android shape的使用(转)
    使用BigDecimal进行精确运算以及格式化输出数字
    MyTextBoxControls正式推出第一个版本T1.1.0.1
    排列组合与回溯算法
    弹出一个层屏蔽页面登录
    一级MS软件下载
    c#:文件对话框(FileDialog)
    采用正则表达式获取图片地址
    超级实用且不花哨的js代码大全
    常用到的一些正则表达式
  • 原文地址:https://www.cnblogs.com/xxhao/p/14321964.html
Copyright © 2011-2022 走看看