wxcbsd123 2022-08-17 16:41 采纳率: 87.5%
浏览 27
已结题

自定义函数问题:确定进制上运行后输出有问题

1413:确定进制

时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
69=42对于十进制来说是错误的,但是对于13进制来说是正确的。即, 6(13) 9(13)= 42(13), 而 42(13)=4131+2130=54(10)。

你的任务是写一段程序,读入三个整数p、q和 r,然后确定一个进制 B(2<=B<=40) 使得 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)=132+231+130=16(10)。对于进制 10,同样有11(10) 11(10)= 121(10)。这种情况下,应该输出 3。如果没有合适的进制,则输出 0。

【输入】
一行,包含三个整数p、q、r。 p、q、r的所有位都是数字,并且1 ≤ p、q、r ≤ 1,000,000。

【输出】
一个整数:即使得p×q=r成立的最小的B。如果没有合适的B,则输出0。

【输入样例】
6 9 42
【输出样例】
13

#include<iostream>
#include<cmath>
using namespace std;
double jz(int,int,int);
int numlen(int);
double zh(int, int,int);
int main() {
    long p, q, r;double res;
    cin >> p >> q >> r;
    res = jz(p, q, r);
    cout << res;
}
double jz(int i1, int i2, int i3)
{
    double jg1,jg2,jg3,i{};
    int len = numlen(i3), len1 = numlen(i1), len2 = numlen(i2);
    while (1)
    {
        double i = 2.0;
        i += 1.0;
        jg3 = zh(len, i, i3);
        jg1 = zh(len1, i, i1);
        jg2 = zh(len2, i, i2);
        if (i > 40.0) break;
        if (jg1 * jg2 == jg3) break;
    }
    if (jg1 + jg2 == jg3) return i;
    else return 0;
}
int numlen(int s)
{
    int sum = 0;
    while (1) {
        if (s > 0) sum++;
        else break;
        s /= 10;
    }
    return sum;
}
double zh(int, int, int)
{
    return 0.0;
}
double zh(int lena, double zz,int ys)
{
    int x3; double x4 = 0.0;
    for (double j = lena - 1; j >= 0; j--) {
        x3 = ys, ys%= 10;
        if (ys <= 0) break;
        x4 += pow(x3, zz);
        ys = x3 / 10;
    }
    return x4;
}

运行结果:
输入:
6 9
输出:
0

我编译了三个函数,jz是求进制的意思,而numlen是求数字长度,zh是i进制转换为十进制。我debug了好久,各位有劳了。
谢谢了

  • 写回答

2条回答 默认 最新

  • 快乐鹦鹉 2022-08-17 17:19
    关注

    你搞的太复杂了,给简化一下。而且函数定义都是错的,进制转换为十进制也是不对

    #include<iostream>
    using namespace std;
    int jz(int,int,int);
    int zh(int, int);
    int main() {
        long p, q, r;
        cin >> p >> q >> r;
        cout << jz(p, q, r);
    }
    int jz(int i1, int i2, int i3)
    {
        int jg1,jg2,jg3,i=2;
        while (i<40)
        {
            jg3 = zh(i, i3);
            jg1 = zh(i, i1);
            jg2 = zh(i, i2);
            if (jg1 * jg2 == jg3) 
                return i;
            i++;
        }
         return 0;
    }
    
    
    int zh(int zz,int ys)
    {
        int x3=1; int res = 0;
        while(ys >0)
        {
            res += ys%10 * x3;
            x3*=zz;
            ys/=10;
        }
        return res;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月26日
  • 已采纳回答 8月18日
  • 创建了问题 8月17日

悬赏问题

  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台
  • ¥15 php查询mysql数据库并显示至下拉列表中
  • ¥15 freertos下使用外部中断失效
  • ¥15 输入的char字符转为int类型,不是对应的ascall码,如何才能使之转换为对应ascall码?或者使输入的char字符可以正常与其他字符比较?
  • ¥15 devserver配置完 启动服务 无法访问static上的资源
  • ¥15 解决websocket跟c#客户端通信