POJ 1331解题报告,确定进制。PS: 我刚才发的怎么没了?

刚才发了结果不见了,暂时不想打字了,先把我的已AC代码贴上来存着


#include<stdio.h>
int zhuan10(int shuzi,int jinzhi){
int jiwei=1;
int sum=shuzi%10;
//printf("传进来的数字是:%d,进制是:%d\n\n",shuzi,jinzhi);
while((shuzi/10)!=0){
int mubiao=1;
jiwei++;
for(int i=1;i<jiwei;i++){
mubiao*=jinzhi;
}

shuzi=shuzi/10;
sum+=(shuzi%10)*mubiao;

}
//printf("这个数字%d 有%d 位,现在是%d 进制,转化为10进制为%d\n\n",shuzi,jiwei,jinzhi,sum);

return sum;
}


int zuida(int shuzi){
int max=shuzi%10;


while(shuzi/10!=0){
shuzi=shuzi/10;
if((shuzi%10)>max){
max=shuzi%10;
}
}
return max;
}


int main(){
int hang=1;
scanf("%d",&hang);
//printf("目标行数%d\n\n",hang);
int **fangge=new int*[hang];
int **fangge1=new int*[hang];
for(int i=0;i<hang;i++){
fangge[i]=new int[3];
fangge1[i]=new int[3];
for(int j=0;j<3;j++){
scanf("%d",&fangge[i][j]);
fangge1[i][j]=zuida(fangge[i][j]);//fangge1中存放的是每个数字的单个最大的那位数字,这样找出每行最大单个位数字之后就可以确定能试的最小进制,试想,个位是5的时候不可能应用6以下的进制
//printf("已录入第%d行第%d列数据%d\n\n",i,j,fangge[i][j]);
}
}

                for(int i=0;i<hang;i++){
//printf("第%d行数据是 ",i);
for(int j=0;j<3;j++){
//printf("%d ",fangge[i][j]);
}
//printf("\n");
int max=0,exchange=0;
for(int k=1;k<3;k++){
if(fangge1[i][0]<fangge1[i][k]){
exchange=fangge1[i][0];
fangge1[i][0]=fangge1[i][k];
fangge1[i][k]=exchange;
}
}
            max=fangge1[i][0];//max是三个数字里面的最大的个位,能用的进制至少比max大1,试想个位是5的数字最少使用6进制规则
//printf("第%d行数据的max是%d\n\n",i,max);
for(int k=max+1;k<17;k++){
//每个能用的进制都试一试,且由于题目说输入整数,不用考虑个位是字母即10进制以上的个位表示
int p= zhuan10(fangge[i][0],k);//第一个数的进制转十进制
int q=zhuan10(fangge[i][1],k);//第二个数的进制转十进制
int r=zhuan10(fangge[i][2],k);//第三个数的进制转十进制
if((p*q)==r){
printf("%d\n",k);
break;
}
else if((p*q)!=r&&k==16){
printf("0\n");
}
}

}

return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值