鱼C论坛

 找回密码
 立即注册
查看: 1071|回复: 2

[已解决]进制转换 代码有什么问题吗

[复制链接]
发表于 2023-11-4 22:04:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目描述
给出一个十进制数,编写函数trans(int x),该函数能够做到将十进制整数x
转换为7进制

输入描述
输入一个整数x
,对于所有测试数据点,保证x
在int表示范围之内

输出描述
输出一个整数ans,表示转换完成的7进制数
#include<bits/stdc++.h>
using namespace std;
long long trans(int x)
{
    int s;s=x%7;x=x/7;
    while(x>0)
    {
        s=s+x%7*10;
        x/=7;
    }
    return s;
}
int main()
{
    int n;
    cin>>n;
    long long a=trans(n);
    cout<<a;
}
最佳答案
2023-11-4 22:05:02
在给定的代码中,存在以下问题:

1. 在函数trans(int x)中,变量s的初始值没有被赋予一个有效的初值。建议在声明变量s时,将其初始化为0,以避免未定义行为。

2. 在转换过程中,变量s被当作十进制数进行累加操作,但实际上它应该表示七进制数。因此,在每一次累加操作之后,需要将s乘以10,以便正确表示当前位的值。

修改后的代码如下所示:
#include <iostream>using namespace std;long long trans(int x) {    int s = 0;    int base = 1; // 用于计算当前位的权值    while (x > 0) {        s += (x % 7) * base;        x /= 7;        base *= 10;    }    return s;}int main() {    int n;    cin >> n;    long long a = trans(n);    cout << a;    return 0;}
经过修改后的代码,可以正确将十进制整数转换为七进制,并输出结果。希望对你有帮助!

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-4 22:04:57 | 显示全部楼层
代码中存在一个问题,即在转换为7进制时,将每一位的余数直接乘以10,然后相加得到结果。这样做是不正确的,因为在7进制中,每一位的取值范围是0到6,而不是0到9。

为了解决这个问题,我们可以使用一个数组来保存每一位的值,然后将数组中的元素拼接起来得到最终的结果。

下面是修改后的代码:
#include<bits/stdc++.h>
using namespace std;

string trans(int x)
{
    string ans;
    while(x > 0)
    {
        int remainder = x % 7;
        ans = to_string(remainder) + ans;
        x /= 7;
    }
    return ans;
}

int main()
{
    int n;
    cin >> n;
    string a = trans(n);
    cout << a;
}

在修改后的代码中,我们使用一个字符串  ans  来保存每一位的值。在每一次循环中,我们计算  x  除以 7 的余数,并将其转换为字符串类型,然后将其拼接到  ans  的前面。最后,我们将  ans  输出作为结果。

这样,我们就能够正确地将一个十进制数转换为7进制数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-4 22:05:02 | 显示全部楼层    本楼为最佳答案   
在给定的代码中,存在以下问题:

1. 在函数trans(int x)中,变量s的初始值没有被赋予一个有效的初值。建议在声明变量s时,将其初始化为0,以避免未定义行为。

2. 在转换过程中,变量s被当作十进制数进行累加操作,但实际上它应该表示七进制数。因此,在每一次累加操作之后,需要将s乘以10,以便正确表示当前位的值。

修改后的代码如下所示:
#include <iostream>using namespace std;long long trans(int x) {    int s = 0;    int base = 1; // 用于计算当前位的权值    while (x > 0) {        s += (x % 7) * base;        x /= 7;        base *= 10;    }    return s;}int main() {    int n;    cin >> n;    long long a = trans(n);    cout << a;    return 0;}
经过修改后的代码,可以正确将十进制整数转换为七进制,并输出结果。希望对你有帮助!

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 00:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表