【问题标题】:Addition of two numbers in c [closed]c中两个数字相加[关闭]
【发布时间】:2015-10-09 12:07:43
【问题描述】:

是否有可能在 C 语言中使用单个变量( int a )来读取和添加两个或三个不同的整数?

我不想使用数组

【问题讨论】:

  • 只使用两个变量,伙计
  • 我想不到。
  • 这个问题是我在大学参加编程比赛时问我的
  • 听起来有点好笑……您是从输入流中读取此输入还是已经计算出这些值?
  • 说真的,如果你想将 4 个 8 位整数与一个 32 位整数相加,或者将 2 个 16 位整数与一个 32 位整数相加,你可以使用指针转换和位移来做到这一点

标签: c


【解决方案1】:

我不确定我是否理解你,但例如,如果你想将 2 个 16 位整数与一个 32 位整数相加,你可以这样做

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h>

int main()
{
    uint32_t a;

    printf("Enter number 1: ");
    scanf("%hd", (uint16_t *)(&a));

    printf("Enter number 2: ");
    scanf("%hd", ((uint16_t *)(&a))+1);

    printf("%X\n", a);

    printf("Sum = %"PRIu32"\n", (uint32_t)(*(uint16_t *)(&a)) + *(((uint16_t *)(&a)) + 1));

    return 0;
}

逻辑是认为变量等于字节数组,就是这样。

这个实现还是有问题,很好解释HERE

【讨论】:

  • 违反严格的别名规则并且依赖于字节序。
  • @Olaf ...但它有效。
  • @Olaf 已编辑和拆分。复仇者改变DV
  • 没有DV!请添加有关问题的注释。在火箭爆炸之前,人们经常对 UB 说“它有效”。
  • @LPs 你在最后一行遗漏了一些东西... printf("Sum = %d\n", (uint32_t)(*(uint16_t *)(&a)) + *(((uint16_t *)(&a)) + 1));
【解决方案2】:

没有。每次将新值赋予同一个变量时,它都会替换旧值。如果您不想使用数组并且它是一个简单的添加数字的代码,只需声明三个变量并将每个值归因于其中一个。

【讨论】:

  • 其实两个变量就足够了。
  • 他说两三个,所以……
  • "...使用单个变量"添加两个或三个不同的整数()(加粗我的)
【解决方案3】:

我不知道您是否愿意,但您可以这样做的另一种方法是接受输入,例如输入计算器,并在对其进行操作之前解析为 int。

类似的东西

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

int main ()
{
    char buffer[256];
    char * pch;

    printf("input your numbers in this format ${number1}+${number2}...: ");
    fgets (buffer, 256, stdin);

    int sum = 0;
    pch = strtok (buffer, "+");
    while (pch != NULL)
    {
        sum += atoi (pch);
        pch = strtok (NULL, "+");
    }
    printf("the sum is %\n", sum);
    return 0;
}

所以,运行它并输入 2+2+2,它会为您计算。谢谢

【讨论】:

  • 你的代码变量太多了!
  • @Olaf 这不是问题...问题是如何使用一个 int 变量而不是使用数组来对数字输入集求和。
  • 给定的问题状态不同。如果您有比此处提供的更多信息,您应该在回答中包含。
  • @Olaf 我考虑了用户可能需要超过 3 个数字输入的情况,比如说 20。你将如何使用第一个答案的方法来解决它?这是我在做这件事之前考虑到的。我明确表示,这可能是另一种方法
猜你喜欢
  • 2013-08-14
  • 2017-06-09
  • 2023-01-08
  • 2014-02-26
  • 2022-01-04
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多