确定进制(经典水题)
来源:互联网 发布:淘宝的伞黑胶都在外面 编辑:程序博客网 时间:2024/05/20 20:47
问题描述:6*9=42 对十进制来说是错误的 但是对13进制来说却是正确的 即6(13)*9(13)=42(13)
42(13)=4*13+2*1=54;你的任务是编写一段程序 读入3个整数,p,q和r 然后确定一个进制B(2<=B<=16),使得p*q=r。如过B有很多选择 则输出最小的那个进制
如果没有合适的进制,则输出0
输入:
输入有t组数据,t在第一行给出。1《=p,q,r<=1000000;
输出:
对于每一次测试样例输出第一行。该行包含一个整数:即令p*q=r成立的最小的B
输入样例:
3
6 9 42
11 11 121
2 2 2
输入样例
13
3
0
思路:先假设等式为B进制,讲三个数先转换为十进制,利用十进制的乘法计算等式左边的结果,在与十进制的r进行比较,找到相应的B值;若不相等则取B=B+1再来一遍。若B>16,则说明没有合适的进制能使等式成立
技巧:
B不一定要从2开始遍历 由r=n%k我们可以知道 r一定是要小于k的 所我们只需要找到表达式三个数所含数字中最大的那个值,B则从那个值+1开始遍历
#include<stdio.h>int max_num(int n){ int max=0; while(n) { int k=n%10; if(k>max) max=k; n/=10; } return max;}int ic_xy(int n,int p){ int k=1,r; int sum=0; while(n) { r=n%10; n/=10; sum+=r*k; k*=p; } return sum;}int main(){ int t; scanf("%d",&t); while(t--) { int a,b,c; scanf("%d%d%d",&a,&b,&c); int amax,bmax; amax=max_num(a); bmax=max_num(b); if(bmax>amax) amax=bmax; bmax=max_num(c); if(bmax>amax) amax=bmax; int da,db,dc;//10进制的a、b for(amax++;amax<=16;amax++) { da=ic_xy(a,amax); db=ic_xy(b,amax); dc=ic_xy(c,amax); if(da*db==dc) break; } if(amax>16) amax=0; printf("%d\n",amax); } return 0;}
1 0
- 确定进制(经典水题)
- POJ 1331(确定进制)
- 确定进制(OpenJudge1973 && POJ1331 )
- 确定进制
- POJ1331确定进制
- 确定进制
- 确定进制
- 确定进制
- 【poj1331】确定进制
- 确定进制
- 3.1poj2972确定进制
- POJ 2972:确定进制
- POJ 1331进制确定
- 2.1 1973确定进制
- CCF NOI1150 确定进制
- ACM-确定进制(数制转化问题)
- 数据结构之B进制(确定进制)
- hdoj 1285 确定比赛名次 (经典拓扑排序题) 初学拓扑排序.做
- STC单片机 定时器时钟FOSC 1T 12T、定时器模式
- UVA10038 Jolly Jumpers
- Jquery Mobile 插件 iscroll的使用
- Struts2教程4:使用validate方法验证数据
- Linux下C语言学习(二)——流程控制语句和数组的学习
- 确定进制(经典水题)
- 垃圾回收(garbage collection)介绍
- 直接路由的高可用LVS集群配置
- 程序员必须知道的10大基础实用算法及其讲解
- OpenCV的序列数据结构
- 9. 多线程 Part 3 同步与死锁 --- 学习笔记
- 动态链接库和静态链接库
- Struts2教程5:使用Validation框架验证数据
- TEST