【问题标题】:Can't get the output I need无法获得我需要的输出
【发布时间】:2021-09-12 00:37:46
【问题描述】:
#include <stdio.h>
#include <math.h>

int main(){

    int base5_v;
    int digit = 0; 

    printf("> ");
    scanf("%d", &base5_v);

    int remainder = base5_v % 10;
    base5_v /= 10;

    int base10_v = remainder * (int) powf(5, digit++);

    remainder = base5_v % 10;
    base5_v /= 10;

    base10_v += remainder * (int) powf(5, digit++);

    remainder = base5_v % 10;

    base10_v += remainder * (int) powf(5, digit++);

    printf("%d in base 5 is %d in base 10\n", base5_v, base10_v);

    return 0;
}

所以我很难在这段代码中找到问题。输入我的号码后,输出应该是这样的:

以 5 为底的 144 是以 10 为底的 49

但是当我编译并运行代码时,它看起来像这样:

以 5 为底的 1 是以 10 为底的 49

我可以就问题所在以及如何解决问题获得一些帮助吗?

【问题讨论】:

  • 因为最后,当您打印出base5_v 时,您已经对其进行了修改——您已将其除以 10,两次。尝试保存输入数字的第二个副本,它不会被修改。
  • 你需要一个循环...查找while

标签: c unix base-conversion


【解决方案1】:

您的代码每次运行 base5_v /= 10; 时都会修改 base5_v

在您的示例中,您将 144 作为输入传递。第一次取模后修改为14,第二次取模后留下1

我认为您的代码中最大的错误是没有使用任何循环。如果用户输入 1234 或其他数字长度会发生什么?您可以通过多种方式对其进行编码,但这是其中之一(忽略用户输入验证):

#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>

#define MAX_DIGIT_LENGTH    10

int main()
{
    char base5_v[MAX_DIGIT_LENGTH] = { '\0' };

    printf("> ");
    scanf("%s", base5_v);

    int base10_v     = 0;
    int digit_length = (int)strlen(base5_v);
    for (int digit = 0; digit < digit_length; digit++)
    {
        base10_v += pow(5, digit) * (base5_v[digit_length - digit - 1] - '0');
    }
    printf("%s in base 5 is %d in base 10\n", base5_v, base10_v);

    return 0;
}

【讨论】:

    猜你喜欢
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2021-05-12
    • 2022-01-22
    • 1970-01-01
    • 2021-02-03
    • 2016-07-02
    相关资源
    最近更新 更多