在一次采访中,我被要求编写一个C程序来查找两个数字的总和而不使用任何运算符。我认为可以使用printf
的返回值来完成,但我不知道如何做到这一点。
这可能吗?
答案 0 :(得分:6)
这是一个糟糕的面试问题。真。它根本不评估任何相关技能。
那说,这就是答案:
int n1 = /* ... */;
int n2 = /* ... */
int sum = printf("%*s%*s", n1, "", n2, "");
%*s
中的printf
表示“打印字符串,但打印的最小字符数等于作为参数传入的值。”这可以通过打印n1
个字符,然后打印n2
个字符,并使用printf
返回打印的字符总数这一事实。 printf
将始终精确打印n1 + n2
个字符,因为空字符串的长度为0,因此将始终使用最大填充。这可能是我想到的最糟糕的添加数字的方式 - 运行时间是Θ(n1 + n2),在此过程中,它会在屏幕上打印出数以万计的空白。
希望这有帮助!
答案 1 :(得分:2)
这可能是一个棘手的问题,让你编写一个程序,要求用户输入答案,然后显示它。
答案 2 :(得分:2)
int a = 4, b = 5, sum;
FILE * f=fopen("tmp","w");
char *buf_a = calloc(a,1);
char *buf_b = calloc(b,1);
fwrite(buf_a,a,1,f);
fwrite(buf_b,b,1,f);
sum = ftell (f);
printf("%d + %d = %d\n", a, b, sum);
答案 3 :(得分:2)
int main()
{
int x = 11;
int y = 22;
int sum = printf("%*c%*c", x, ' ', y, ' ');
printf("Sum = %d", sum);
return 0;
}
答案 4 :(得分:0)
使用printf中的对数和指数函数,我们可以对两个数求和
代码:
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
int a = 8, b = 6;
printf("%g\n", log(exp(a) * exp(b)));
return 0;
}