• 51 Nod 1116 K进制下的大数


    1116 K进制下的大数 

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题

     收藏

     关注

    有一个字符串S,记录了一个大数,但不知这个大数是多少进制的,只知道这个数在K进制下是K - 1的倍数。现在由你来求出这个最小的进制K。

    例如:给出的数是A1A,有A则最少也是11进制,然后发现A1A在22进制下等于4872,4872 mod 21 = 0,并且22是最小的,因此输出k = 22(大数的表示中A对应10,Z对应35)。

    Input

    输入大数对应的字符串S。S的长度小于10^5。
    

    Output

    输出对应的进制K,如果在2 - 36范围内没有找到对应的解,则输出No Solution。

    Input示例

    A1A

    Output示例

    22

    正如一个数能被9整除的充要条件是各位置上的数字之和被9整除一样,K进制下的数能被K-1整除的充要条件是各个位置上的数字之和能被K-1整除。。。

    
    #include<bits/stdc++.h>
    #include<stdio.h>
    #include<iostream>
    #include<cmath>
    #include<math.h>
    #include<queue>
    #include<set>
    #include<map>
    #include<iomanip>
    #include<algorithm>
    #include<stack>
    #define inf 0x3f3f3f3f
    typedef long long ll;
    namespace IO {
        const int MT = 10 * 1024 * 1024;  /// 10MB 请注意输入数据的大小!!!
        char IO_BUF[MT];
        int IO_PTR, IO_SZ;
        /// 要记得把这一行添加到main函数第一行!!!
        void begin() {
            IO_PTR = 0;
            IO_SZ = fread (IO_BUF, 1, MT, stdin);
        }
        template<typename T>
        inline bool scan_d (T & t) {
            while (IO_PTR < IO_SZ && IO_BUF[IO_PTR] != '-' && (IO_BUF[IO_PTR] < '0' || IO_BUF[IO_PTR] > '9'))
                IO_PTR ++;
            if (IO_PTR >= IO_SZ) return false;
            bool sgn = false;
            if (IO_BUF[IO_PTR] == '-') sgn = true, IO_PTR ++;
            for (t = 0; IO_PTR < IO_SZ && '0' <= IO_BUF[IO_PTR] && IO_BUF[IO_PTR] <= '9'; IO_PTR ++)
                t = t * 10 + IO_BUF[IO_PTR] - '0';
            if (sgn) t = -t;
            return true;
        }
        inline bool scan_s (char s[]) {
            while (IO_PTR < IO_SZ && (IO_BUF[IO_PTR] == ' ' || IO_BUF[IO_PTR] == '
    ') ) IO_PTR ++;
            if (IO_PTR >= IO_SZ) return false;
            int len = 0;
            while (IO_PTR < IO_SZ && IO_BUF[IO_PTR] != ' ' && IO_BUF[IO_PTR] != '
    ')
                s[len ++] = IO_BUF[IO_PTR], IO_PTR ++;
            s[len] = '';
            return true;
        }
        template<typename T>
        void print(T x) {
            static char s[33], *s1; s1 = s;
            if (!x) *s1++ = '0';
            if (x < 0) putchar('-'), x = -x;
            while(x) *s1++ = (x % 10 + '0'), x /= 10;
            while(s1-- != s) putchar(*s1);
        }
        template<typename T>
        void println(T x) {
            print(x); putchar('
    ');
        }
    };
    using namespace IO;
    using namespace std;
    char s[1000050];
    int n,w=0;
    int digit(char c){
        if('0'<=c&&c<='9')return c-'0';
        return c-'A'+10;
    }
    int main(){
        begin();
        scan_s(s);
        int len=strlen(s);
        for(int i=0;i<len;++i){
            n+=digit(s[i]);
            w=max(w,digit(s[i]));
        }
        for(int i=w;i<36;++i)if(n%i==0){
            printf("%d
    ",i+1);
            return 0;
        }
        printf("No Solution
    ");
    }
    
  • 相关阅读:
    electron之打包成安装程序
    electron之环境安装、启动程序
    微信支付.net官方坑太多,我们来精简
    微信支付官方.net版之坑你没商量
    程序员出路在何方
    简单介绍
    mac中显示隐藏文件
    sublime Text 3 安装emmet
    Andriod学习笔记5:通过NDK在C++中实现日志输出
    Andriod学习笔记4:mac下搭建 Eclipse+CDT 集成开发环境
  • 原文地址:https://www.cnblogs.com/linruier/p/9747090.html
Copyright © 2020-2023  润新知