zoukankan      html  css  js  c++  java
  • poj百练2972 进制问题

    题目连接:http://poj.grids.cn/practice/2972/

     1 /* 功能Function Description:
     2    开发环境Environment:          DEV C++ 4.9.9.1
     3    技术特点Technique:
     4    版本Version:
     5    作者Author:                    可笑痴狂
     6    日期Date:                      20120730
     7    备注Notes:
     8     描述
     9         6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) * 9(13) = 42(13), 而 42(13) = 4 * 131 + 2 * 130 = 54(10)。 你的任务是写一段程序读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=16) 使得 p * q = r. 如果 B有很多选择, 输出最小的一个。例如: p = 11, q = 11, r = 121. 则有 11(3) * 11(3) = 121(3) 因为 11(3) = 1 * 31 + 1 * 30 = 4(10) 和 121(3) = 1 * 32 + 2 * 31 + 1 * 30 = 16(10)。 对于进制 10,有 11(10) * 11(10) = 121(10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。
    10     输入
    11         输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1 <= p、q、r <= 1,000,000。
    12     输出
    13         对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。
    14     样例输入
    15         3
    16         6 9 42
    17         11 11 121
    18         2 2 2
    19     样例输出
    20         13
    21         3
    22         0
    23 */
    24 
    25 
    26 #include<stdio.h>
    27 #include<math.h>
    28 
    29 int findmin(int p,int q,int r)//寻找p、q、r三个数中每位上最大的数字max,则该数的进制数一定大于max
    30 {
    31     int max=0;
    32     while(p)
    33     {
    34         if(p%10>max)
    35             max=p%10;
    36         p/=10;
    37     }
    38     while(q)
    39     {
    40         if(q%10>max)
    41             max=q%10;
    42         q/=10;
    43     }
    44     while(r)
    45     {
    46         if(r%10>max)
    47             max=r%10;
    48         r/=10;
    49     }
    50     return max;
    51 }
    52 
    53 int change(int num,int i) //把i进制数num转化十进制数返回
    54 {
    55     int sum,b;
    56     sum=b=0;
    57     while(num)
    58     {
    59         sum+=num%10*pow(i,b++);
    60         num/=10;
    61     }
    62     return sum;
    63 }
    64 
    65 int main()
    66 {
    67     int T,i,p,q,r,t1,t2,t3;
    68     scanf("%d",&T);
    69     while(T--)
    70     {
    71         scanf("%d%d%d",&p,&q,&r);
    72         i=findmin(p,q,r)+1;   //i为可能的最小进制数
    73         for(;i<=16;++i)
    74         {
    75             t1=change(p,i);
    76             t2=change(q,i);
    77             t3=change(r,i);
    78             if(t1*t2==t3)
    79                 break;
    80         }
    81         if(i>16)
    82             printf("0\n");
    83         else
    84             printf("%d\n",i);
    85     }
    86     return 0;
    87 }
    功不成,身已退
  • 相关阅读:
    HDU 4814
    POJ 3415
    HDU 4941
    C scanf()
    hdu 4850 Wow! Such String!
    HDU 4828 Grids
    HDU 4832 Chess
    HDU 4831
    SpringCloud 网飞系 转换阿里系2
    用jianmu建木自动化打包vue前端应用,并远程ssh建立文件夹,scp文件至对应目录
  • 原文地址:https://www.cnblogs.com/dongsheng/p/2615502.html
Copyright © 2011-2022 走看看