• CCF NOI1056 表达式


    问题链接CCF NOI1056 表达式




    时间限制: 1000 ms  空间限制: 262144 KB

    题目描述 

      表达式6×9=42对于十进制来说是错误的,但是对于十三进制来说是正确的。即6(13)×9(13)=42(13),而42(13)=4×131+2×130=54(10)。你的任务是写一段程序读入3个整数p、q和r,然后确定一个进制B(2≤B≤16)使得p×q=r。如果B有很多选择,输出最小的一个。例如:p=11,q=11,r=121。则有11(3) ×11(3)=121(3),11(10) ×11(10)=121(10)。这种情况下,输出3。如果没有合适的进制,则输出0。

    输入

      一行,3个B进制的正整数p、q、r(数位≤7)。

    输出

      使得p×q=r成立的最小进制B,如果没有合适的进制,则输出0。

    样例输入

    6 9 42
    样例输出

    13

    数据范围限制

     

    提示

     




    问题分析

      这是一个进制问题,穷举法一个一个试

      开始时从16进制开始往小试,只得了80分,题意要求是如果两种进制都符合,输出小的进制。

      对于B进制,那么其数字只能小于B,例如8进制使用的数字是0-7。

    程序说明

      开始时不论是什么进制,先都按10进制输入,然后再用函数convert()进行转换。

    要点详解

    • 使用宏定义可以使得代码可阅读性增强。
    • C语言程序,功能要尽量封装到函数中。



    参考链接:(略)。

    100分通过的C语言程序:

    #include <stdio.h>
    
    const int BASE10 = 10;
    
    long convert(long v, int base)
    {
        long ans, weight;
        int digit;
    
        ans = 0;
        weight = 1;
        while(v) {
            digit = v % BASE10;
            v /= BASE10;
            if(digit >= base) {
                ans = -1;
                break;
            }
    
            ans += weight * digit;
    
            weight *= base;
        }
    
        return ans;
    }
    
    int main(void)
    {
        long p, q, r;
        long p2, q2, r2;
        int ans, i;
    
        scanf("%ld%ld%ld", &p, &q, &r);
        ans = 0;
        for(i=2; i<16; i++) {
            p2 = convert(p, i);
            if(p2 < 0) {
                ans = 0;
                continue;
            }
            q2 = convert(q, i);
            if(q2 < 0) {
                ans = 0;
                continue;
            }
            r2 = convert(r, i);
            if(r2 < 0) {
                ans = 0;
                continue;
            }
    
            if(p2 * q2 == r2) {
                ans = i;
                break;
            }
        }
    
        printf("%d
    ", ans);
    
        return 0;
    }



  • 相关阅读:
    PHP
    思科模拟器
    路由器
    服务器
    Windows Server 2008 笔记【瞎写】
    Day1 T3 数列
    java中自定义excel模板并且填充内容
    springMVC接收值list时,超过256出现IndexOutOfBoundsException
    java将日期转换成周几
    两个tomcat配置各自的SSL证书(前后端分离)
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563865.html
Copyright © 2020-2023  润新知