不使用运算符将​​两个数字相加

Posted

技术标签:

【中文标题】不使用运算符将​​两个数字相加【英文标题】:add two numbers without using operators 【发布时间】:2012-10-06 11:05:39 【问题描述】:

我正在寻找如何在不使用 ('+'/'++') 的情况下添加两个数字并完成了 link。但是,我也找到了这个解决方案:

#include<stdio.h>
int add(int x, int y);

int add(int x, int y)

    return printf("%*c%*c",  x, ' ',  y, ' ');


int main()

    printf("Sum = %d", add(3, 4));
    return 0;

有人能解释一下 add 函数发生了什么吗?

【问题讨论】:

如果你有一个 C99 实现,你可以改为:return snprintf(NULL, 0, "%*c%*c", x, '#', y, '#'); 而不会弄乱输出。无论如何,这种方法永远不会对负值起作用! 可以使用其他运算符吗(例如 - / *)? 以前在***上问过这个问题,但我找不到。有人记得这个吗? 不,我不能使用任何其他运算符。 How to add two numbers without using ++ or + or another arithmetic operator的可能重复 【参考方案1】:
return printf("%*c%*c",  x, ' ',  y, ' ');

printf 格式中的* 表示用于打印字符的字段宽度取自printf 的参数,在本例中为xyprintf 的返回值是打印的字符数。所以它打印一个' ',字段宽度为x,一个字段宽度为y,总共产生x + y个字符。

【讨论】:

那么这意味着第一个 %*c 需要第一个 ' ' 字符来打印它 x 次?我说的对吗? 是和不是。在' ' 的情况下,它就是这样做的,但正确的描述是它用空格填充它应该打印的任何字符以填充所需的字段宽度。 这些空格是在要打印的字符之前还是之后填充? @Vaibhav Agarwal:例如,只需输入 - 而不是空格,然后查看打印输出。对我来说,填充在前面。 填充通常添加在左侧,但带有- 标志,字段左对齐并在右侧添加填充。【参考方案2】:

那么会发生这样的事情:c 之前的 * 告诉 printf

格式字符串中没有指定宽度,而是作为附加 必须为的参数之前的整数值参数 格式化。

因此这意味着第一个空格字符将以a 的宽度打印,第二个以b 的宽度打印。同时printf返回打印的字符数,其实就是a + b个字符。

【讨论】:

以上是关于不使用运算符将​​两个数字相加的主要内容,如果未能解决你的问题,请参考以下文章

算法:通过逻辑运算实现两数相加

c_cpp 我们的程序使用加法运算符+来将两个数相加。编写程序使乘法运算符*,来打印两个数的积。

js基础2

用位运算实现两个数相加

编写一个不使用算术运算符将两个数字相乘的程序[重复]

3Python运算符