确定进制(OpenJudge1973 && POJ1331)
总时间限制: 1000ms 内存限制:65536kB
描述
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。
输入
一行, 包含三个整数 p、 q、 r, 相邻两个整数之间用单个空格隔开。p、 q、r
的所有位都是数字, 并且 1 <= p、q、 r <= 1,000,000。
输出
一个整数: 即使得 p * q = r 成立的最小的B。 如果没有合适的 B, 则输出 0。
样例 1 输入
6 9 42
样例 1 输出
13
样例 2 输入
2 2 2
样例 2 输出
0 提
示: 经过计算, 可以确定 B 是小于17 的
分析: 我们只需要从小到大枚举所有的进制 B, 如果当前的B 可以满足等式, 就
输出 B, 如果一直到了 17 还没有答案, 那么就输出 0.进制的转换也是需要注意
总时间限制: 1000ms 内存限制:65536kB
描述
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。
输入
一行, 包含三个整数 p、 q、 r, 相邻两个整数之间用单个空格隔开。p、 q、r
的所有位都是数字, 并且 1 <= p、q、 r <= 1,000,000。
输出
一个整数: 即使得 p * q = r 成立的最小的B。 如果没有合适的 B, 则输出 0。
样例 1 输入
6 9 42
样例 1 输出
13
样例 2 输入
2 2 2
样例 2 输出
0 提
示: 经过计算, 可以确定 B 是小于17 的
分析: 我们只需要从小到大枚举所有的进制 B, 如果当前的B 可以满足等式, 就
输出 B, 如果一直到了 17 还没有答案, 那么就输出 0.进制的转换也是需要注意
的, 且不需要高精度计算。
附AC码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int a[10001]={0};
int b[10001]={0},kk;
void jinwei(int y){
for(int i=1;i<=kk;i++)
if(b[i]>=y){
b[i]-=y;
b[i+1]++;
kk=kk>i+1?kk:i+1;
}
else
return ;
}
int main(){
int i,j=0,k,m,n,u,v,flag=0;
scanf("%d%d%d",&n,&m,&k);
while(k>0){
j++;
a[j]=k%10;
k/=10;
}kk=1;
for(i=2;i<17;i++){
for(j=1;j<=m;j++){
b[1]+=n;
jinwei(i);
}
for(j=1;j<=kk;j++){
if(b[j]!=a[j]){
for(u=1;u<=kk;u++)
b[u]=0;
flag=1;
}
}
for(u=1;u<=kk;u++)
b[u]=0;
if(flag==1){
flag=0;
continue;
}
v=i;
break;
}
printf("%d\n",v);
return 0;
}