- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解以下程序是如何工作的。它是一个命令行科学计算器。来源取自here 。对于 IOCCC 条目来说,它似乎非常可读,但显然事实并非如此。
#include <stdio.h>
#include <math.h>
#define clear 1;if(c>=11){c=0;sscanf(_,"%lf%c",&r,&c);while(*++_-c);}\
else if(argc>=4&&!main(4-(*_++=='('),argv))_++;g:c+=
#define puts(d,e) return 0;}{double a;int b;char c=(argc<4?d)&15;\
b=(*_%__LINE__+7)%9*(3*e>>c&1);c+=
#define I(d) (r);if(argc<4&&*#d==*_){a=r;r=usage?r*a:r+a;goto g;}c=c
#define return if(argc==2)printf("%f\n",r);return argc>=4+
#define usage main(4-__LINE__/26,argv)
#define calculator *_*(int)
#define l (r);r=--b?r:
#define _ argv[1]
#define x
double r;
int main(int argc,char** argv){
if(argc<2){
puts(
usage: calculator 11/26+222/31
+~~~~~~~~~~~~~~~~~~~~~~~~calculator-\
! 7.584,367 )
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
! clear ! 0 ||l -x l tan I (/) |
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
! 1 | 2 | 3 ||l 1/x l cos I (*) |
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
! 4 | 5 | 6 ||l exp l sqrt I (+) |
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
! 7 | 8 | 9 ||l sin l log I (-) |
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(0
);
}
return 0;
}
使用 -Wall
在 gcc 4.7.2 (Linux) 上编译时不会出现警告。我试图简化它,但对下面给出的稍微修改的形式进行任何进一步的更改都会开始产生意外的结果(不正确的输出)。
#include <stdio.h>
#include <math.h>
#define clear 1;if(c>=11){c=0;sscanf(_,"%lf%c",&r,&c);while(*++_-c);}\
else if(argc>=4&&!main(4-(*_++=='('),argv))_++;g:c+=
#define puts(d,e) return 0;}{double a;int b;char c=(argc<4?d)&15;\
b=(*_%__LINE__+7)%9*(3*e>>c&1);c+=
#define I(d) (r);if(argc<4&&*#d==*_){a=r;r=usage?r*a:r+a;goto g;}c=c
#define return if(argc==2)printf("%f\n",r);return argc>=4+
#define usage main(4-__LINE__/26,argv)
#define calculator *_*(int)
#define l (r);r=--b?r:
#define _ argv[1]
#define x
double r;
int main(int argc,char** argv){
if(argc<2){
puts(
usage: calculator 11/26+222/31
+calculator-\
! 7.584,367 )
+
! clear ! 0 ||l -x l tan I (/) |
+
! 1 | 2 | 3 ||l 1/x l cos I (*) |
+
! 4 | 5 | 6 ||l exp l sqrt I (+) |
+
! 7 | 8 | 9 ||l sin l log I (-) |
+(0);
}
return 0;
}
有人可以解释一下它是如何工作的吗?
最佳答案
它展开后看起来像这样:
double r;
int
main (int argc, char **argv)
{
if (argc < 2)
{
if (argc == 2)
printf ("%f\n", r);
return argc >= 4 + 0;
}
{
double a;
int b;
char c = (argc < 4 ? main (4 - 21 / 26,
argv) : *argv[1] * (int) 11 / 26 + 222 / 31 +
~~~~~~~~~~~~~~~~~~~~~~~~*argv[1] * (int) -!7.584) & 15;
b = (*argv[1] % 21 + 7) % 9 * (3 * 367 >> c & 1);
c += +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+!1;
if (c >= 11)
{
c = 0;
sscanf (argv[1], "%lf%c", &r, &c);
while (*++argv[1] - c);
}
else if (argc >= 4 && !main (4 - (*argv[1]++ == '('), argv))
argv[1]++;
g:c += !0 || (r);
r = --b ? r : -(r);
r = --b ? r : tan (r);
if (argc < 4 && *"/" == *argv[1])
{
a = r;
r = main (4 - 23 / 26, argv) ? r * a : r + a;
goto g;
}
c = c | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+!1 | 2 | 3 || (r);
r = --b ? r : 1 / (r);
r = --b ? r : cos (r);
if (argc < 4 && *"*" == *argv[1])
{
a = r;
r = main (4 - 25 / 26, argv) ? r * a : r + a;
goto g;
}
c = c | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+!4 | 5 | 6 || (r);
r = --b ? r : exp (r);
r = --b ? r : sqrt (r);
if (argc < 4 && *"+" == *argv[1])
{
a = r;
r = main (4 - 27 / 26, argv) ? r * a : r + a;
goto g;
}
c = c | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+!7 | 8 | 9 || (r);
r = --b ? r : sin (r);
r = --b ? r : log (r);
if (argc < 4 && *"-" == *argv[1])
{
a = r;
r = main (4 - 29 / 26, argv) ? r * a : r + a;
goto g;
}
c = c | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(0);
}
if (argc == 2)
printf ("%f\n", r);
return argc >= 4 + 0;
}
它仍然不完全可读,但至少现在没有什么对你隐藏。您应该能够在不被咬得那么厉害的情况下进行简化。
出于 @cmaster 所说的同样原因,我不会进行完整的解释。
关于c - 混淆的科学计算器。请解释一下它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18017282/
我目前正在尝试使用 ParaView Calculator-Filter 将给定的笛卡尔坐标 (x,y,z) 转换为球坐标 (r, theta, phi),其中 theta 是极角,phi 是方位角。
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我有这个问题,我想显示如果0/0,输出是:“不能将0除以自身”。如何调整我的代码以便可以显示该输出?如果是这样,我应该使用什么代码才能实现我的目标? 下面是我的代码: #include using
我正在尝试创建一个也支持负数的计算器,并最终创建一个 lisp 风格的树。 我像这样定义词法分析器规则: INT :'-'? [0-9]+ ; LBRACKET : '('; RBRACKET :
我正在开发一个基本的 JavaScript 计算器,我也希望能够开始计算负数。现在,如果我在输入数字之前单击“-”,“-”将不会显示,因此我只能从正数开始。有人可以告诉我如何将其包含在我的代码中吗?
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这是我第一次尝试 Java。该项目是一个计算器,它需要一个数字、一个运算符(operator)信号(+、-、*、/)和另一个数字来创建方程并给出其最终值,然后询问用户是否要重新启动程序另一个方程或不是
所以我写了这个脚本;它有点像我找到并拼凑起来的计算器的大杂烩。 KeyListener 来自 Java - oracle - .com 网站。顺便说一句,我对此非常陌生,不知道我在做什么。 我正在尝试
我正在尝试创建一个也支持负数的计算器,并最终创建一个 lisp 风格的树。 我像这样定义词法分析器规则: INT :'-'? [0-9]+ ; LBRACKET : '('; RBRACKET :
我正在开发一个基本的 JavaScript 计算器,我也希望能够开始计算负数。现在,如果我在输入数字之前单击“-”,“-”将不会显示,因此我只能从正数开始。有人可以告诉我如何将其包含在我的代码中吗?
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我开始在java中创建一个计算器,我试图循环遍历字符串输入,如果输入中有任何整数,则将它们添加到ArrayList calcOperands中。在 parseInput() 方法中,我使用 charA
我正忙着制作计算器,但不知怎的,整数没有被使用,我不知道为什么。我尝试修复它,但我不知道该怎么做。我使用带有事件的按钮来计算答案,也许有问题。这是我的代码:顺便说一句,我使用 Eclipse
我的主类中有这段代码。我的问题是,GPA 是用总分除以类(class)来计算的。它没有给我完整的号码。 EX,如果总数为 14,类(class)为 4,则为 3.5,我的代码只给我 3.0。有谁知道为
我需要创建一个可以加、减、乘、除、绝对值和舍入的计算器。这是我到目前为止所拥有的 import java.util.Scanner; public class Calculator { pub
我是一名 Java Noob,正在研究 GUI 计算器,但我刚刚来到这里..我已经有了按钮,我需要绑定(bind)这些数字并存储在运算符 ( + - */) 之间的某个位置以显示在我的 JTextAr
这是我的作业。但是,我无法让结果发挥作用。我希望它打印出来为: > 2*7*6 2 * 7 ---- 14 * 6 ---- 84 等等。我希望无论我输入多少个数字,代码都能正常工作
这个问题已经有答案了: What does a "Cannot find symbol" or "Cannot resolve symbol" error mean? (18 个回答) 已关闭 6 年
大家好,感谢您帮助我。 我用 C# 制作了这个计算器,但遇到了一个问题。 当我添加像 5+5+5 这样的东西时,它给了我正确的结果,但是当我想减去两个以上的数字并且还想除或乘以两个以上的数字时,我没有
我一直在开发计算器作为自己的学习项目。它工作正常,只是我无法弄清楚如何阻止人们添加应用程序破坏输入,例如 1++-*/4。我尝试了各种方法,例如将当前显示拆分为一个数组,并将其与具有所有运算符的另一个
我是一名优秀的程序员,十分优秀!