相邻数字的基数等比确定进制问题pojg2972
解决数制转换问题时,如果所给的数值不是用十进制表示的,一般用一个字符型数组来存放,数组的每个元素分别存储它的一位数字。然后按位转换求和,得到十进制表示,再把十进制转成成其他所求的进制表示。转成的结果也用一个字符型数组表示。
根据数制表示中相邻位的基数关系,可以把不同的数制分成2类:一类数制表示中相邻位的基数是等比关系,如十进制表示。另一类相邻位的基数是不等比的。如时间表示中。
2927:确定进制:
描述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。
输入
输入有 T组测试样例。 T在第一行给出。每一组测试样例占一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1 <= p、q、r <= 1,000,000。
输出
对于每个测试样例输出一行。该行包含一个整数:即使得p * q = r成立的最小的B。如果没有合适的B,则输出 0。
注意审题:2<=b<=16;
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
long b2ten(char *x,int b)
{
int ret=; int len=strlen(x);
int base;
for(int i=len-1;i>=0;i--)
{
if(x[i]-'0'>=b) return -1; //还要判断是否超过b,
if(i==len-)
base=;
else base*=b;
ret+=base*(x[i]-'');
//最开始写的是ret+=base*x[i];结果调试时发现输入为6时,ret=54;想了了base是int型,x[i]为char类型,int与char类型相乘
结果是用char型的asci码和int相乘,结果是int型的。于是把要把它转成int的。想到用atoi函数,但是提示错误:
atoi(const char* )与char不匹配,原来atoi是针对字符串的,不能针对字符的,如何把char转成int,减去‘0’就可以了。
}
return (long)ret;
}
int main()
{
int nCases;
scanf("%d",&nCases);
char p[],q[],r[];
long p1,q1,r1;
int b;
for(int i=;i<nCases;i++)
{
scanf("%s%s%s",p,q,r); for(b=;b<=;b++)
{
p1=b2ten(p,b); q1=b2ten(q,b);
r1=b2ten(r,b); if(p1==-||q1==-||r1==-) continue;
if(p1*q1==r1)
{
printf("%d\n",b);
break;
} }
if(b==) printf("0\n"); } }
上面的b2ten非常好理解,是从最低位开始求和的。我们也可以从最高位开始求。例如:
211,我们先求
ret=0*10+2;
在2*10+1=21;
再ret=21*10+1=211;
说明从高位往地位求和也可以。
long b2ten2(char *x,int b)
{
int ret=;
int len=strlen(x);
for(int i=;i<len;i++)
{
if(x[i]-''>=b) return -;
ret*=b;
ret+=x[i]-'0';
}
return (long)ret;
}
这种方式更加好。
相邻数字的基数等比确定进制问题pojg2972的更多相关文章
- 相邻数字的基数不等比:skew数
2973:Skew数 描述在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1). 每个位上的可能数字是0 或 1,最后面一个非零位可以是2, 例如, 10120(skew) ...
- JavaScript 字符串转数字(整数,浮点数,进制转换)
下面是使用parseFloat()方法的示例: parseFloat("1234blue"); //returns 1234.0 parseFloat("0xA" ...
- 【Qt开发】QString与数字类型的转换(不同进制)
把QString转换为 double类型 方法1.QString str="123.45"; double val=str.toDouble(); //val=123.45 方法2 ...
- js 把数字转成2 ,8,16进制的方法
直接上代码 <!DOCTYPE html> <html> <body> <script> var myNumber = 128; document.wr ...
- PythonStudy——进制 System of numeration
十进制 人类天然选择了十进制. 二进制 二进制有两个特点:它由两个数码0,1组成,二进制数运算规律是逢二进一. 四进制 四进制是以4为基数的进位制,以 0.1.2 和 3 四个数字表示任何实数. 七进 ...
- JS 进制转换
十进制转换成其他进制 objectname.toString([radix]) objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...
- mysql 10进制与35进制之间的转换 注意Power处理bigint的问题
35进制的目的是防止0和O造成的视觉误差 BEGIN DECLARE m_StrHex35 VARCHAR(100); -- 返回35进制表示的结果 DECLARE m_Remainder B ...
- java学习之常量与进制
java中的常量包括以下几类: 1.整型常量,比如:3,5,89,99 2.浮点型常量:比如1.23,5.98,3.1415926 3,字符常量:'a','c','1'(需要注意的一点是字符常量只能包 ...
- sql 进制转换,支持93内的进制相互转换
功能:实现在SQL内进制的互相转换,支持从2 - 93进制内的转换,若需要支持其他字符,可以自定义@ym变量实现扩充 -- ====================================== ...
随机推荐
- ThinkPHP - 登录模块,核心代码
/** * 登录成功 * @return [type] [description] */ public function checkLogin($data) { $user = M($this-> ...
- 替换NavigationController里面的返回按钮
通过navigationController push进来的controller,默认的返回按钮是将本controller pop出去. 但有时候想在pop出去前完成一些自己的一些事情,这时可以自己写 ...
- spring 事务 笔记3.1
Spring事务 以前的事务都是编程式事务,需要开启和关闭,然后程序写在这里面 spring,声明式事务 Spring事务隔离级别 DEFAULT 使用数据库默认隔离级别 READ_UNCOMMITT ...
- css中的定位
上一篇博客,我大概介绍了下浮动的使用及行为.其实在整个文档布局中,定位也对我们整个的页面排版有非常好的帮助,当然前提是使用得当. 一.定位分类: a.静态定位 position:static; ...
- 【SQL】行转列过滤,使用别名和不使用别名的区别用法。
需求为: 仿太平洋网站筛选. 多选类型的字段应采用‘并且’:单选和录入类型的字段应采用‘或者’ 比如有如下选项: 参数头 参数体 操作系统(多选) win7 win8 运行内存(单选) 2G 4G 商 ...
- 【JavaScript】强制缓存刷新
1.在js引用时加入时间戳. <script> document.write('<script src="xxx.js?_dc='+new Date().getTime() ...
- c++,public/protected/private权限修饰符
1.public的变量可以在类中以及外部访问到: 2. private只可以在类/友元中访问到. #include <iostream> using namespace std; //-- ...
- 树莓派做web服务器(nginx、Apache)
一想到Linux Web服务器,我们首先想到的是: Apache + MySql + Php. Apache:是世界使用排名第一的Web服务器软件. 可以运行在几乎所有广泛使用的计算机平台上,由于其跨 ...
- Java -- WeakHashMap
一.引言 Java中的引用类型由四种情况,强引用.软引用.弱引用.虚引用.关于这些的介绍可以参见鄙人另外一篇博文. ...
- 《算法导论》读书笔记之图论算法—Dijkstra 算法求最短路径
自从打ACM以来也算是用Dijkstra算法来求最短路径了好久,现在就写一篇博客来介绍一下这个算法吧 :) Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的 ...