初莫M 发表于 2023-11-4 22:04:46

进制转换 代码有什么问题吗

题目描述
给出一个十进制数,编写函数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;
}

isdkz 发表于 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进制数。

Mike_python小 发表于 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;
}


经过修改后的代码,可以正确将十进制整数转换为七进制,并输出结果。希望对你有帮助!

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 进制转换 代码有什么问题吗