• FZOJ 2102 Solve equation


                                                                                                                                         Problem 2102 Solve equation

    Accept: 1097    Submit: 2608
    Time Limit: 1000 mSec    Memory Limit : 32768 KB

     Problem Description

    You are given two positive integers A and B in Base C. For the equation:

    A=k*B+d

    We know there always existing many non-negative pairs (k, d) that satisfy the equation above. Now in this problem, we want to maximize k.

    For example, A="123" and B="100", C=10. So both A and B are in Base 10. Then we have:

    (1) A=0*B+123

    (2) A=1*B+23

    As we want to maximize k, we finally get one solution: (1, 23)

    The range of C is between 2 and 16, and we use 'a', 'b', 'c', 'd', 'e', 'f' to represent 10, 11, 12, 13, 14, 15, respectively.

     Input

    The first line of the input contains an integer T (T≤10), indicating the number of test cases.

    Then T cases, for any case, only 3 positive integers A, B and C (2≤C≤16) in a single line. You can assume that in Base 10, both A and B is less than 2^31.

     Output

    For each test case, output the solution “(k,d)” to the equation in Base 10.

     Sample Input

    3 2bc 33f 16 123 100 10 1 1 2

     Sample Output

    (0,700) (1,23) (1,0) 
     
    题意:对于形式A=k*B+d,给定A,B两个数,求k,d两个值,且A,B的进制有可能是2~16进制中的其中一种
    思路:首先将A,B都换算成10进制,再作除法运算。
    AC代码:
    #define _CRT_SECURE_NO_DEPRECATE
    #include<iostream>
    #include<algorithm>
    #include<string>
    using namespace std;
    
    int base;
    
    int translator(string s) {
        int sum = 0;
        for (int i = 0; i < s.size();i++) {
            if (s[i] >= '0'&&s[i] <= '9')
                sum = sum*base + s[i] - '0';
            else
                sum = sum*base + s[i] - 'a' + 10;
      }
        return sum;
    }
    
    int main() {
        int T;
        scanf("%d",&T);
        while (T--) {
            string s1, s2;
            cin >> s1 >> s2;
            scanf("%d",&base);
            int a = translator(s1);
            int b = translator(s2);
            int c = a / b;
            int mod = a%b;
            printf("(%d,%d)
    ",c,mod);
    
        }
        return 0;
    }
  • 相关阅读:
    java类,接口浅谈
    人月神话阅读笔记01
    学习进度条14
    学习进度条13
    每日站立会议10(完结)
    每日站立会议09
    每日站立会议08
    构建之法阅读笔记06(完)
    每日站立会议07
    每日站立会议06
  • 原文地址:https://www.cnblogs.com/ZefengYao/p/6754741.html
Copyright © 2020-2023  润新知