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

来源:互联网 发布:动漫人物绘画软件 编辑:程序博客网 时间:2024/04/29 19:32

刚才发了结果不见了,暂时不想打字了,先把我的已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
原创粉丝点击