函数接收5个号码,我们称之为a,b,c,d和e
你必须显示两个数字。
第一个是((a+ b) - c) * d) %e=f
第二个是((a+ b) - c) *d- f) /e
Input: Output:
7 5 9 3 8 1 1
1 2 3 4 5 0 0
19 25 9 7 11 3 22
21 12 99 3 13 -3 -15
21 12 99 3 -4 -2 49要求:计算时不得使用“+”-“*”/“符号”(或等效符号)。但是,在进行计算时,可以使用'%‘符号(或等效符号)。
同等地,我的意思是不允许您使用诸如BigInteger.add()这样的函数(我正在查看您的java用户)。
最短代码获胜。
编辑:正如彼得所建议的那样。所有输入数字都是int,永远不会是0。
发布于 2013-11-22 08:50:20
我只是用点产品。
f={Mod@##,Quotient@##}&[{{#,#2,#3}.{1,1,-1}}.{#4},#5]&示例:
f[19, 25, 9, 7, 11]{3,22}
发布于 2013-11-22 07:08:21
: u 2dup ;
: p swap ;
: t -rot ;
: a u xor t and begin ?dup while 2* u xor t and repeat ;
: n invert 1 a ;
: m dup 0 < if p n p n then 0 p 0 ?do over a loop nip ;
: d dup 0 < t p dup 0 < t abs p abs p 0
begin t u <= while over n a rot 1 a repeat 2drop t xor if n then ;
: y 4 roll 4 roll a 3 roll n a rot m p u mod . d . ;禁止的算术运算用二进制运算来定义。核心词组mod被用作%的等效词。
最后一个单词y是顶层函数,它接受五个数字并输出两个数字作为输出。
发布于 2013-11-20 05:44:14
#include<iostream>
#define I int
#define R return
#define T (I x,I y)
I A T{I a,b;do{a=x&y;b=x^y;x=a<<1;y=b;}while(a);R b;}
I N(I v){R A(~v,1);}
I S T{R A(x,N(y));}
I V(I v){R v<0?N(v):v;}
I M T{I a=0;I i=0;while(i<V(x)){i=A(i,1);a=A(a,y);}R x<0?S(0,a):a;}
I D T{I a=0;x=y==0?0:x;while(M(V(y),a)<V(x))a=A(a,1);R M(y==0?0:S(A(a,1),(x%y==0?1:2)),x<0^y<0?N(1):1);}
void C(I a,I b,I c,I d,I e){I g,f;f=(g=M(S(A(a,b),c),d))%e;std::cout<<f<<' '<<D(S(g,f),e);}
I main(I a){I b,c,d,e;std::cin>>a>>b>>c>>d>>e;C(a,b,c,d,e);}我得到的结果和你的例子一样,除了最后两个,我分别得到-3 -15和-2 49。这是我从下面得到的同样的结果..。
int f = (((a + b) - c) * d) % e;
std::cout << f << ' ' << (((a + b) - c) * d - f) / e;https://codegolf.stackexchange.com/questions/15339
复制相似问题