1010. Radix (25)

Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The answer is "yes", if 6 is a decimal number and 110 is a binary number.

Now for any pair of positive integers N1 and N2, your task is to find the radix of one number while that of the other is given.

Input Specification:

Each input file contains one test case. Each case occupies a line which contains 4 positive integers:
N1 N2 tag radix
Here N1 and N2 each has no more than 10 digits. A digit is less than its radix and is chosen from the set {0-9, a-z} where 0-9 represent the decimal numbers 0-9, and a-z represent the decimal numbers 10-35. The last number "radix" is the radix of N1 if "tag" is 1, or of N2 if "tag" is 2.

Output Specification:

For each test case, print in one line the radix of the other number so that the equation N1 = N2 is true. If the equation is impossible, print "Impossible". If the solution is not unique, output the smallest possible radix.

Sample Input 1:

6 110 1 10 

Sample Output 1:

2 

Sample Input 2:

1 ab 1 2 

Sample Output 2:

Impossible 

刚开始以为此题的范围会超过long long int,试过后发现并没有。另外题目说字符串里面的数字只有{0-9,a-z},让我以为radix的范围不会超过36,后来发现错了。更改后提交,发现有一个case超时了,估计这个case里的radix非常大,于是radix也采用long long int,并且采用二分搜索,这才解决超时问题。注意这VS下long long int应该定义成__int64,输入输出格式为%I64d。

代码

  1 #define __int64 long long
  2 #include <stdio.h>
  3 #include <string.h>
  4 
  5 long long calculateFunc(char *,long long);
  6 int maxDigit(char *);
  7 int char2num(char);
  8 int main()
  9 {
 10     long long N1,N2,radix;
 11     int tag;
 12     char str1[],str2[];
 13     char *p1,*p2;
 14     while(scanf("%s %s",str1,str2) != EOF){
 15         scanf("%d%I64d",&tag,&radix);
 16         if(tag == ){
 17             p1 = str1;
 18             p2 = str2;
 19         }
 20         else{
 21             p1 = str2;
 22             p2 = str1;
 23         }
 24         N1 = calculateFunc(p1,radix);
 25         int radixMin = maxDigit(p2) + ;
 26         if (radixMin < )
 27             radixMin = ;
 28         int strN = strlen(p2);
 29         if(strN == ){
 30             N2 = char2num(*p2);
 31             if(N2 == N1){
 32                 printf("%I64d\n",N2+);
 33             }
 34             else{
 35                 printf("Impossible\n");
 36             }
 37             continue;
 38         }
 39         long long i = radixMin;
 40         N2 = calculateFunc(p2,i);
 41         int flag = ;
 42         while(N2 <= N1){
 43             if(N1 == N2){
 44                 printf("%I64d\n",i);
 45                 flag = ;
 46                 break;
 47             }
 48             i *= ;
 49             N2 = calculateFunc(p2,i);
 50         }
 51         if(!flag){
 52             long long s = i / ,e = i;
 53             long long mid;
 54               while(e >= s){
 55                 mid = (s + e) / ;
 56                 N2 = calculateFunc(p2,mid);
 57                 if(N1 == N2){
 58                     printf("%I64d\n",mid);
 59                     flag = ;
 60                     break;
 61                 }
 62                 else if (N1 > N2){
 63                     s = mid + ;
 64                 }
 65                 else{
 66                     e = mid - ;
 67                 }
 68               }
 69             if(!flag){
 70                 printf("Impossible\n");
 71             }
 72         }
 73     }
 74     return ;
 75 }
 76 
 77 long long calculateFunc(char *p,long long radix)
 78 {
 79     int n = strlen(p);
 80     int i;
 81     long long N = ;
 82     for(i=;i<n;++i){
 83         N = N * radix + char2num(*(p+i));
 84     }
 85     return N;
 86 }
 87 
 88 int maxDigit(char *p)
 89 {
 90     int n = strlen(p);
 91     int i;
 92     int m = -;
 93     int t;
 94     for(i=;i<n;++i){
 95         t = char2num(*(p+i));
 96         if (t > m)
 97             m = t;
 98     }
 99     return m;
 }
 
 int char2num(char c)
 {
     if(c >= '' && c <= '')
         return c - '';
     else if(c >= 'a' && c <= 'z')
         return c - 'a' + ;
     else
         return -;
 }

PAT 1010的更多相关文章

  1. PAT 1010 一元多项式求导 (25)(STL-map+思路)

    1010 一元多项式求导 (25)(25 分)提问 设计函数求一元多项式的导数.(注:x^n^(n为整数)的一阶导数为n*x^n-1^.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均 ...

  2. 已经菜到不行了 PAT 1010. Radix (25)

    https://www.patest.cn/contests/pat-a-practise/1010 题目大意: 输入四个数字,a,b,c,d. a和b是两个数字,c=1表示是第一个数字,c=2表示是 ...

  3. PAT 1010. 一元多项式求导

    1010. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数 ...

  4. PAT 1010 Radix(X)

    1010 Radix (25 分)   Given a pair of positive integers, for example, 6 and 110, can this equation 6 = ...

  5. PAT 1010. 一元多项式求导 (25)

    设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式:以与 ...

  6. PAT——1010. 一元多项式求导

    设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式:以与 ...

  7. PAT 1010 Radix 进制转换+二分法

    Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...

  8. PAT 1010 Radix (二分)

    Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...

  9. PAT 1010 Radix (25分) radix取值无限制,二分法提高效率

    题目 Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The ...

随机推荐

  1. 【转】目前最细致清晰的NSDictionary以及NSMutableDictionary用法总结 -- 不错

    原文网址:http://www.cnblogs.com/wengzilin/archive/2012/03/15/2397712.html 做过Java语言 或者 C语言 开发的朋友应该很清楚 关键字 ...

  2. 异常处理 Exception

    一.异常类 1.在C#中所有的异常都是使用一个异常类型的示例对象表示的,这些异常类型都是继承自System.Exception类型,或者直接使用System.Exception类型的实例对象: 2.在 ...

  3. Android学习系列(20)--App数据格式之解析Json

    JSON数据格式,在Android中被广泛运用于客户端和网络(或者说服务器)通信,非常有必要系统的了解学习.     恰逢本人最近对json做了一个简单的学习,特此总结一下,以飨各位.     为了文 ...

  4. Linux 下操作gpio(两种方法,驱动和mmap)

    目前我所知道的在linux下操作GPIO有两种方法: 1.  编写驱动,这当然要熟悉linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据 ...

  5. (转载)linux环境变量

    转自:http://www.cnblogs.com/growup/archive/2011/07/02/2096142.html Linux 的变量可分为两类:环境变量和本地变量 环境变量,或者称为全 ...

  6. [RQNOJ313]波浪数

    题目描述 波浪数是在一对数字之间交替转换的数,如1212121,双重波浪数则是指在两种进制下都是波浪数的数,如十进制数191919是一个十进制下的波浪数,它对应的十一进制数121212也是一个波浪数, ...

  7. 线性存储结构-ArrayList、Vector

    ArrayList:采用数组的内部构建形式,也就是顺序存储模式.当新增一个对象时,如果当前长度超过预设,会使用System.arraycopy(定义一个更长的数组进行复制处理),这个时候开销比较大. ...

  8. [原]《打造未来的Java》视频笔记

    [Date]2013-09-28 [Author]wintys (wintys@gmail.com) http://wintys.cnblogs.com [Content]: 1.Java7新特性 1 ...

  9. Java Spring 中你不知道的注入方式

    前言 在Spring配置文件中使用XML文件进行配置,实际上是让Spring执行了相应的代码,例如: 使用<bean>元素,实际上是让Spring执行无参或有参构造器 使用<prop ...

  10. Java之Property-统获取一个应用程序运行的次数

    package FileDemo; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStre ...