PAT 1010
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的更多相关文章
- PAT 1010 一元多项式求导 (25)(STL-map+思路)
1010 一元多项式求导 (25)(25 分)提问 设计函数求一元多项式的导数.(注:x^n^(n为整数)的一阶导数为n*x^n-1^.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均 ...
- 已经菜到不行了 PAT 1010. Radix (25)
https://www.patest.cn/contests/pat-a-practise/1010 题目大意: 输入四个数字,a,b,c,d. a和b是两个数字,c=1表示是第一个数字,c=2表示是 ...
- PAT 1010. 一元多项式求导
1010. 一元多项式求导 (25) 设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数 ...
- PAT 1010 Radix(X)
1010 Radix (25 分) Given a pair of positive integers, for example, 6 and 110, can this equation 6 = ...
- PAT 1010. 一元多项式求导 (25)
设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式:以与 ...
- PAT——1010. 一元多项式求导
设计函数求一元多项式的导数.(注:xn(n为整数)的一阶导数为n*xn-1.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式:以与 ...
- PAT 1010 Radix 进制转换+二分法
Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...
- PAT 1010 Radix (二分)
Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The an ...
- PAT 1010 Radix (25分) radix取值无限制,二分法提高效率
题目 Given a pair of positive integers, for example, 6 and 110, can this equation 6 = 110 be true? The ...
随机推荐
- 实现类似QQ的即时通信程序(十一)
此为网络编程的一个系列,后续会把内容补上....
- 更改nginx默认的网页目录
默认网站根目录为/usr/local/nginx/html,要将它改成/homw/www vi /usr/local/nginx/conf/nginx.conf 将其中的 loca ...
- window.location.search作用
window.location.search.substr(1).split("&") 这里面的相关属性和时间还有参数能具体说明一下吗?window.location wi ...
- CSS3 Transitions, Transforms和Animation使用简介与应用展示
CSS3 Transitions, Transforms和Animation使用简介与应用展示 by zhangxinxu from http://www.zhangxinxu.com本文地址:htt ...
- (三)学习CSS之opacity 属性
参考:http://www.w3school.com.cn/cssref/pr_opacity.asp opacity 属性设置元素的不透明级别. 所有浏览器都支持 opacity 属性. 注释:IE ...
- HDU 5618 Jam's problem again CDQ分治 BC ROUND 70
题意:给你1e5个点(x,y,z),对于每一个点询问有多少个点(x1,y1,z1)满足x1<=x&&y1<=y&&z1<=z 分析:(官方题解奉上)很 ...
- Git管理命令
1.创建分支 git branch <分支名> 2.切换分支 git checkout <分支名> 创建并切换到该分支:git checkout -b <分支名> ...
- css定位方式
CSS表达式 匹配元素说明 xpath * 匹配任何元素 //* div 标签 //div div#eleID by ID //div[@id='eleID'] div.class by clas ...
- Mongodb千万级数据在python下的综合压力测试及应用探讨
http://rfyiamcool.blog.51cto.com/1030776/1329351
- 【转载】shell中的特殊变量$
shell中的特殊变量:变量名含义$0shell或shell脚本的名字$*以一对双引号给出参数列表$@将各个参数分别加双引号返回$#参数的个数$_代表上一个命令的最后一个参数$$代表所在命令的PID$ ...