解决数制转换问题时,如果所给的数值不是用十进制表示的,一般用一个字符型数组来存放,数组的每个元素分别存储它的一位数字。然后按位转换求和,得到十进制表示,再把十进制转成成其他所求的进制表示。转成的结果也用一个字符型数组表示。

根据数制表示中相邻位的基数关系,可以把不同的数制分成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的更多相关文章

  1. 相邻数字的基数不等比:skew数

    2973:Skew数 描述在 skew binary表示中, 第 k 位的值xk表示xk*(2k+1-1). 每个位上的可能数字是0 或 1,最后面一个非零位可以是2, 例如, 10120(skew) ...

  2. JavaScript 字符串转数字(整数,浮点数,进制转换)

    下面是使用parseFloat()方法的示例: parseFloat("1234blue"); //returns 1234.0 parseFloat("0xA" ...

  3. 【Qt开发】QString与数字类型的转换(不同进制)

    把QString转换为 double类型 方法1.QString str="123.45"; double val=str.toDouble(); //val=123.45 方法2 ...

  4. js 把数字转成2 ,8,16进制的方法

    直接上代码 <!DOCTYPE html> <html> <body> <script> var myNumber = 128; document.wr ...

  5. PythonStudy——进制 System of numeration

    十进制 人类天然选择了十进制. 二进制 二进制有两个特点:它由两个数码0,1组成,二进制数运算规律是逢二进一. 四进制 四进制是以4为基数的进位制,以 0.1.2 和 3 四个数字表示任何实数. 七进 ...

  6. JS 进制转换

    十进制转换成其他进制 objectname.toString([radix])   objectname 必选项.要得到字符串表示的对象. radix 可选项.指定将数字值转换为字符串时的进制. 例如 ...

  7. mysql 10进制与35进制之间的转换 注意Power处理bigint的问题

    35进制的目的是防止0和O造成的视觉误差 BEGIN    DECLARE m_StrHex35 VARCHAR(100); -- 返回35进制表示的结果  DECLARE m_Remainder B ...

  8. java学习之常量与进制

    java中的常量包括以下几类: 1.整型常量,比如:3,5,89,99 2.浮点型常量:比如1.23,5.98,3.1415926 3,字符常量:'a','c','1'(需要注意的一点是字符常量只能包 ...

  9. sql 进制转换,支持93内的进制相互转换

    功能:实现在SQL内进制的互相转换,支持从2 - 93进制内的转换,若需要支持其他字符,可以自定义@ym变量实现扩充 -- ====================================== ...

随机推荐

  1. 使用数据库绑定ListBox控件

    1. The HTML Markup <div> <asp:ListBox ID="ListBox1" runat="server">& ...

  2. poj 1905 Expanding Rods 二分

    /** 题解晚上写 **/ #include <iostream> #include <math.h> #include <algorithm> #include ...

  3. 高质量程序设计指南C/C++语言——C++/C编译预处理

    C++/C的编译预处理器对预编译伪指令进行处理后生成中间文件作为编译器的输入,因此所有的预编译伪指令都不会进入编译阶段.预编译伪指令一般都以#打头,且其前面只能出现空白字符.预编译伪指令不是C++/C ...

  4. 运行mvc报“无法确定存储版本;需要有效的存储连接或版本提示”

    解决方法:删除数据库重建

  5. Java InputStream读取网络响应Response数据的方法

    Java InputStream读取数据问题 原理讲解 1. 关于InputStream.read()     在从数据流里读取数据时,为图简单,经常用InputStream.read()方法.这个方 ...

  6. Linux 中将用户添加到组的指令

    在 Linux 操作系统下,如何添加一个新用户到一个特定的组中?如何同时将用户添加到多个组中?又如何将一个已存在的用户移动到某个组或者给他增加一个组?对于不常用 Linux 的人来讲,记忆 Linux ...

  7. BZOJ 1029: [JSOI2007]建筑抢修

    1029: [JSOI2007]建筑抢修 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有 ...

  8. Maven--构建企业级仓库(二)

    <Maven--搭建开发环境(一)> <Maven--构建企业级仓库(二)> <Maven—几个需要补充的问题(三)>              看到经历的两家公司 ...

  9. layout_weight属性详解

    看到上面这段代码,大家肯定认为三个TextView的宽度是1:2:2,但实际上是如图1这样的,宽度之比确实是1:2:2,但为什么第一个和后两个是齐平的呢?下面我给大家画一条线,可以看到虽然控件是没有对 ...

  10. ThinkPHP - 独立分组项目搭建

    配置文件: <?php return array( //独立分组 'APP_GROUP_LIST' => 'Home,Admin', //分组列表 'APP_GROUP_MODE' =&g ...