1010. Radix (25)
来源:互联网 发布:线切割直线编程怎么编 编辑:程序博客网 时间:2024/05/08 19:12
题目:1010. Radix (25)
#include <stdio.h>#include <string.h>long long TransDecimal(char s[],long long radix);long long BinSearch(long long n,char s[]);long long findMinRadix(char s[]);int compare(long long n,char s[],long long radix);int main(){ char s1[12],s2[12]; int tag; long long radix,r; scanf("%s %s %d %lld",s1,s2,&tag,&radix); switch(tag) { case 1:r=BinSearch(TransDecimal(s1,radix),s2);break; case 2:r=BinSearch(TransDecimal(s2,radix),s1);break; } if(r==-1)printf("Impossible"); else printf("%lld",r);}long long TransDecimal(char s[],long long radix){ long long n=0; long long len=strlen(s),i; for(i=0;i<len;i++) { if(s[i]>='0'&&s[i]<='9') n=n*radix+s[i]-'0'; else if(s[i]>='a'&&s[i]<='z') n=n*radix+s[i]-'a'+10; } return n;}long long BinSearch(long long n,char s[]){ long long leftRadix=findMinRadix(s),mid; long long rightRadix=(n>leftRadix)?n+1:leftRadix+1; while(leftRadix<rightRadix) { mid=(leftRadix+rightRadix)/2; int ret=compare(n,s,mid); if(ret==0)return mid; else if(ret==1) { leftRadix=mid; } else if(ret==-1) { rightRadix=mid; } } return -1;}long long findMinRadix(char s[]){ long long minRadix=-1; int len=strlen(s),i; for(i=0;i<len;i++) { if(s[i]>='0'&&s[i]<='9'&&s[i]-'0'>minRadix) minRadix=s[i]-'0'; else if(s[i]>='a'&&s[i]<='z'&&s[i]-'a'+10>minRadix) minRadix=s[i]-'a'+10; } return minRadix+1;}int compare(long long n,char s[],long long radix){ int i,len=strlen(s); long long m=0; for(i=0;i<len;i++) { if(s[i]>='0'&&s[i]<='9')m=m*radix+s[i]-'0'; else if(s[i]>='a'&&s[i]<='z')m=m*radix+s[i]-'a'+10; if(n<m)return -1;//NOTE:m过大而产生溢出! } int ret; if(n>m)ret=1; else if(n==m)ret=0; else ret=-1; return ret;}
0 0
- 1010. Radix (25)
- 1010. Radix (25)
- 1010. Radix (25)-PAT
- 【PAT】1010. Radix (25)
- 1010. Radix (25)
- 1010. Radix (25)
- PAT 1010. Radix (25)
- 1010. Radix (25)
- PAT 1010. Radix (25)
- 1010. Radix (25)
- 1010. Radix (25)
- 1010. Radix (25) (JAVA)
- PAT 1010. Radix (25)
- 1010. Radix (25)
- 1010. Radix (25)
- 1010. Radix (25)
- 1010. Radix (25)
- PAT 1010. Radix (25)
- 正确编写Designated Initializer的几个原则
- 大数据面试题
- 常用方法和一些快捷键
- 有两个房间,一间房里有三盏灯,另一间房有控制着三盏灯的三个开关, 这两个房间是分割开的,从一间里不能看到另一间的情况。 现在要求受训者分别进这两房间一次,然后判断出这三盏灯分别是由哪个开关控制的。
- Android TV开发总结(二)构建一个TV Metro界面(仿泰捷视频TV版)
- 1010. Radix (25)
- thinkphp的程序本地测试正常放到网站上后打开一片空白
- 作业:二进制数+1的后续
- RAW实现
- SpringMVC源码分析--容器初始化(三)HttpServletBean
- HDU - 5505 GT and numbers 【GCD】
- linux菜鸟入门之文本处理小工具sed
- uva 11040 规律递推(水)
- 通过jdk自带xjc将xsd 快速生成java类