c语言程序进制,C语言程序设计100例之(25):确定进制

本文介绍了如何编写一个C语言程序,该程序寻找满足特定条件的进制,即存在一个整数b(2<=b<=16),使得在b进制下,两个给定的整数乘积等于第三个整数。通过将输入的数字转换为不同进制并进行比较,程序可以确定这样的b值,并在找不到合适进制时输出0。
摘要由CSDN通过智能技术生成

例25    确定进制

问题描述

6*9 = 42 对于十进制来说是错误的,但是对于13进制来说是正确的。即

6(13)* 9(13)= 42(13),因为,在十三进制中,42 = 4 * 13 + 2 = 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(10)* 11(10)= 121(10)。这种情况下,输出3。如果没有合适的进制,则输出0。

输入格式

三个整数p、q和r。

输出格式

所确定的进制b。如果没有合适的进制,则输出0。

输入样例

6 9 42

输出样例

13

(1)编程思路。

选择一个进制b,按照该进制将被乘数p、乘数q、乘积r分别转换成十进制数pb、qb和rb。然后判断等式pb*qb==rb是否成立。使得等式成立的最小b就是所求的结果。

设n位b进制数num=(an-1an-2……a1a0),将其按权值展开后求和就可得到对应的十进制数ret。

6ad76b2dd6e78c96d7166be4232c1b2f.png

由上式可以看出,b进制数num转换为十进制数ret可以写成一个循环。方法是:另ret初始值为0,从高位到低位循环分离出num的各位数字digit,执行        ret=ret*b+digit,循环结束就可得b进制数num对应的十进制数ret。

编写函数int b2ten(int num,int b)完成b进制数num转换为十进制数。

由于转换时需要从高位向低位分离数字,而用循环

while (num!=0)

{

digit = num%10;

num = num/10;

}

能方便地完成从低位向高位分离出num的各位数字。因此,可采用一个数组digit[]来保存从低位向高位分离出的各位数字,同时num中数字的位数保存到变量cnt中。

(2)源程序。

#include

int b2ten(int num,int b);

int main()

{

int b,p,r,q;

int pb,qb,rb;    // 用来存储转换为十进制后的结果

scanf("%d%d%d",&p,&q,&r);

for(b=2;b<=16;b++)

{

pb=b2ten(p,b);

qb=b2ten(q,

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值