zoukankan      html  css  js  c++  java
  • B

    https://vjudge.net/contest/387998#problem/B

    Little Rabbit is interested in radix. In a positional numeral system, the radix is the number of unique digits, including the digit $0$, used to represent numbers. For example, for the decimal system (the most common system in use today) the radix is ten, because it uses the ten digits from $0$ to $9$. Generally, in a system with radix $b$ ($b > 1$), a string of digits $d_1 dots d_n$ denotes the number $d_1b^{n-1} + d_2b^{n-2} + dots + d_nb^0$, where $0 le d_i < b$.

    Little Rabbit casually writes down an equation. He wonders which radix this equation fits.

    InputThe are several test cases. Each test case contains a string in a line, which represents the equation Little Rabbit writes down. The length of the string is at most $15$. The input is terminated by the end-of-file.

    The equation's format: number, operator, number, $=$, number. There's no whitespace in the string.

    Each number has at least $1$ digit, which may contain digital numbers $0$ to $9$ or uppercase letters $A$ to $F$ (which represent decimal $10$ to $15$). The number is guaranteed to be a non-negative integer, which means it doesn't contain the radix point or negative sign. But the number may contain leading zeros.

    The operator refers to one of $+$, $-$, $*$, or $/$. It is guaranteed that the number after $/$ will not be equal to $0$. Please note that the division here is not integer division, so $7/2=3$ is not correct.OutputFor each test case, output an integer $r$ ($2 le r le 16$) in a line, which means the equation is correct in the system with radix $r$. If there are multiple answers, output the minimum one. If there is no answer between $2$ and $16$, output $-1$.Sample Input

    1+1=10
    18-9=9
    AA*AA=70E4
    7/2=3

    Sample Output

    2
    10
    16
    -1

    题意:
      给一些算式 判断该算式成立的数的最小进制

      保证都是整除,不是的话输出-1,长度为15,进制为2~16

    思路:

      模拟 分字符串

       字符串通过+, -, *把数字分割出来,产生3段

       从小到大枚举每种进制

    代码:

      

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<bitset>
    #include<cassert>
    #include<cctype>
    #include<cmath>
    #include<cstdlib>
    #include<ctime>
    #include<deque>
    #include<iomanip>
    #include<list>
    #include<map>
    #include<queue>
    #include<set>
    #include<stack>
    #include<vector>
    #include <vector>
    #include <iterator>
    #include <utility>
    #include <sstream>
    #include <limits>
    #include <numeric>
    #include <functional>
    using namespace std;
    #define gc getchar()
    #define mem(a) memset(a,0,sizeof(a))
    
    #define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    
    typedef long long ll;
    typedef unsigned long long ull;
    typedef long double ld;
    typedef pair<int,int> pii;
    typedef char ch;
    typedef double db;
    
    const double PI=acos(-1.0);
    const double eps=1e-6;
    const int inf=0x3f3f3f3f;
    const int maxn=1e5+10;
    const int maxm=100+10;
    const int N=1e6+10;
    const int mod=1e9+7;
    
    int Atoi(string s,int radix)  
    {
    	int ans = 0;
    	for(int i = 0;i<s.size();i++)
    	{
    		char t = s[i];
    		if(t >= '0' && t <= '9') 
    		{
    			if(t - '0' >= radix)
    				return -1;
    			ans = ans * radix + 1ll * (t -'0');
    		}
    		else 
    		{
    			if(1ll * (t - 'A' + 10) >= radix) 
    				return -1;
    			ans = ans * radix + 1ll * (t - 'A' + 10);
    		}
    	}
    	return ans;
    }
    signed main()
    {
    	string s;
    	while(cin >> s)
    	{
    		int opt = -1;
    		int eq = -1;
    		for(int i = 0; i < s.size(); i++)
    		{
    			if(s[i] >= '0' && s[i] <= '9' || s[i] >= 'A' && s[i] <= 'Z')
    			{
    				continue;
    			}
    			if(opt == -1)
    			{
    				opt = i;
    			}
    			else
    			{
    				eq = i;
    			}
    		}
    		string A = s.substr(0, opt);
    		string B = s.substr(opt + 1, eq - opt - 1);
    		string C = s.substr(eq + 1);
    		bool flag = 0;
    		for(int i = 2; i <= 16; i++)
    		{
    			int a = Atoi(A, i), b = Atoi(B, i), c= Atoi(C, i);
    			if(a == -1 || b == -1 || c == -1)
    			{
    				continue;
    			}
    			bool S = 0;
    			if(opt == '+')
    			{
    				S = a + b == c;
    			}
    			else if(s[opt] == '-')
    			{
    				S = a - b == c;
    			}
    			else if(s[opt] == '*')
    			{
    				S = a * b == c;
    			}
    			else 
    			{
    				if(b == 0) return -1;
    				S = a % b == 0 && a == b * c;
    			}
    			if(S)
    			{
    				cout << i << endl;
    				flag = 1;
    				break;
    			}
    		}
    		if(!flag)
    		{
    			cout << -1 << endl;
    		}
    	}
    }
    

      

     参考:https://www.cnblogs.com/lipoicyclic/p/13448226.html

  • 相关阅读:
    进度报告(五)
    大道至简读后感
    进度报告(四)
    进度报告(三)
    进度报告(二)
    进度报告(一)
    18.4---2出现了几次(CC150)
    17.5---珠玑妙算,四个槽,红色黄色绿色蓝色(CC150)
    17.2---#字棋(CC150)
    17.3---阶乘尾多少个0(CC150)
  • 原文地址:https://www.cnblogs.com/SutsuharaYuki/p/13476188.html
Copyright © 2011-2022 走看看