• NOI-OJ 1.13 ID:34 确定进制


    整体思路

    • 对于任意的p,q,r,可能使得p*q=r的最小进制应该是p,q,r三个数的所有数位中最大的数字+1,例如,6,9,42三个数中所有数位中最大的数字是9,故可能成立的最小进制是9+1,即10。题目告诉我们,最大进制B<=16,这就确定了进制的最小范围。

    • 我们设计以下函数来简化程序流程:

      1. int minB(),根据p,q,r计算最小进制
      2. int nBto10(int num, int B),将B进制的数字num转化为10进制数
      3. bool test(int B),测试p,q,r在进制B条件下是否成立
    • 为了简化函数形参,我们把p,q,r设置为全局变量

    例程

    #include<iostream>
    using namespace std;
    int p, q, r;							//定义为全局变量,可以简化函数参数传递
    
    bool test(int B);
    int nBto10(int num, int B);
    int minB();								//三个函数的声明
    
    int main(){
    	int jz;
    	cin>>p>>q>>r;
    	jz=minB();
    	while(jz<=16){						//从最小进制到16依次测试
    		if(test(jz)){
    			cout<<jz;					//成功即停止循环
    			break;
    		}
    		jz++;
    	}
    	if(jz==17) cout<<"0";				//jz==17说明没有符合条件的进制
    	return 0;
    }
    
    bool test(int B){
    	int P = nBto10(p, B);				//B进制转换为10进制
    	int Q = nBto10(q, B);
    	int R = nBto10(r, B);
    	if(P*Q==R)	return true;
    	else 		return false;
    }
    
    int nBto10(int num, int B){
    	int result=0;
    	int i=1;
    	while(num){							//进制转换过程
    		result+=num%10*i;
    		num/=10;
    		i*=B;
    	}
    	return result;
    }
    
    int minB(){
    	int max=0;
    	int P=p, Q=q, R=r;					//求最大数位max
    	while(P) { if(max<P%10) max=P%10; P/=10; }
    	while(Q) { if(max<Q%10) max=Q%10; Q/=10; }
    	while(R) { if(max<R%10) max=R%10; R/=10; }
    	return max+1;						//别忘记+1
    }
  • 相关阅读:
    ab性能测试工具
    Web_add_cookie的作用
    loadrunner录制时,设置能不记录所有的事件
    oracle插入数据问题
    LR检查点
    LoadRunner 一参多用
    loadrunner 脚本中文乱码
    LoadRunner参数化取值与连接数据库
    LoadRunner中的随机数
    loadrunner 的Administration Page里面设置
  • 原文地址:https://www.cnblogs.com/lfyzoi/p/6698241.html
Copyright © 2020-2023  润新知