PAT甲级1010
来源:互联网 发布:361网络彩票骗局 编辑:程序博客网 时间:2024/06/18 18:29
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
char n1[20],n2[20],n3[20];
int tag,radix;
long long num1=0,num2=0;
scanf("%s%s%d%d",&n1,&n2,&tag,&radix);
long long i=0,temp=0;
if(tag==2) {strcpy(n3,n2);strcpy(n2,n1);strcpy(n1,n3);} //始终让n1为已知进制
for(i=0;n1[i]!='\0';i++)
{
if(n1[i]>='0'&&n1[i]<='9') temp=n1[i]-'0';
else temp=n1[i]-'a'+10;
num1=num1*radix+temp; //计算出N1数组的值
}
// printf("\n%d",num1);
// printf("\n%s",n1);
// printf("\n%s",n2);
int max=0;
for(i=0;n2[i]!='\0';i++) //找出N2中最大的位max,说明n2起码是max+1进制
{ if(n2[i]>='0'&&n2[i]<='9') //
temp=n2[i]-'0';
else temp=n2[i]-'a'+10;
if(temp>max) max=temp;
}
long long left=max+1;
long long right=num1+1;//最大进制肯定不超过num1+1,why?因为只要有一位数a(不为零),a*(num1+1)就肯定大于num1,就不用比较了
long long mid=0; // 一开始我把右边界设置为2的63次方-1,因为这是最大longlong数,但是这样,会有测试点通不过(结果偏大),例如,n1=1,n2=1,应该输出2
while(left<=right)//二分查找
{
mid=(left+right)/2;
num2=0;
for(i=0;n2[i]!='\0';i++)
{ if(n2[i]>='0'&&n2[i]<='9')
temp=n2[i]-'0';
else temp=n2[i]-'a'+10;
num2=num2*mid+temp;
if(num2>num1) break;
// printf("**%d**",num2);
}
if(num2==num1)
// printf("\n%d\n",num2);
{
printf("%lld",mid);return 0;}
if(num2>num1||num2<0) right=mid-1;
else left=mid+1;
}
printf("Impossible");
return 0;
}
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
char n1[20],n2[20],n3[20];
int tag,radix;
long long num1=0,num2=0;
scanf("%s%s%d%d",&n1,&n2,&tag,&radix);
long long i=0,temp=0;
if(tag==2) {strcpy(n3,n2);strcpy(n2,n1);strcpy(n1,n3);} //始终让n1为已知进制
for(i=0;n1[i]!='\0';i++)
{
if(n1[i]>='0'&&n1[i]<='9') temp=n1[i]-'0';
else temp=n1[i]-'a'+10;
num1=num1*radix+temp; //计算出N1数组的值
}
// printf("\n%d",num1);
// printf("\n%s",n1);
// printf("\n%s",n2);
int max=0;
for(i=0;n2[i]!='\0';i++) //找出N2中最大的位max,说明n2起码是max+1进制
{ if(n2[i]>='0'&&n2[i]<='9') //
temp=n2[i]-'0';
else temp=n2[i]-'a'+10;
if(temp>max) max=temp;
}
long long left=max+1;
long long right=num1+1;//最大进制肯定不超过num1+1,why?因为只要有一位数a(不为零),a*(num1+1)就肯定大于num1,就不用比较了
long long mid=0; // 一开始我把右边界设置为2的63次方-1,因为这是最大longlong数,但是这样,会有测试点通不过(结果偏大),例如,n1=1,n2=1,应该输出2
while(left<=right)//二分查找
{
mid=(left+right)/2;
num2=0;
for(i=0;n2[i]!='\0';i++)
{ if(n2[i]>='0'&&n2[i]<='9')
temp=n2[i]-'0';
else temp=n2[i]-'a'+10;
num2=num2*mid+temp;
if(num2>num1) break;
// printf("**%d**",num2);
}
if(num2==num1)
// printf("\n%d\n",num2);
{
printf("%lld",mid);return 0;}
if(num2>num1||num2<0) right=mid-1;
else left=mid+1;
}
printf("Impossible");
return 0;
}
阅读全文
0 0
- PAT(甲级)1010
- PAT甲级1010
- PAT甲级1010
- PAT甲级 1010
- 浙大PAT甲级-1010
- 【PAT】甲级1010
- PAT甲级1010:Radix
- PAT 甲级
- **浙大PAT甲级 1010 进制转化
- PAT-甲级-1010 Radix(25)
- PAT甲级 A1025.PAT RANKING
- PAT 甲级 1025 PAT Ranking
- PAT(甲级)1003
- PAT(甲级)1004
- PAT(甲级)1005
- PAT(甲级)1006
- PAT(甲级)1007
- PAT(甲级)1008
- Android APK版本更新下载
- Python3 sys(解释器 模块)
- 计算某一年的某一月有多少天。
- Cocos2d-x项目创建之 原生ios项目导入Cocos2d框架
- CPP里的指针和引用
- PAT甲级1010
- 1052 地鼠游戏
- 扒一扒 ReentrantLock 以及 AQS 实现原理
- Java8 CompletableFuture讲解
- iQuery HelloWorld
- HTTP-406错误
- Codeforces 707B Bakery 题解
- tomcat远程查看日志
- HDU 1075