鱼C论坛

 找回密码
 立即注册
查看: 4154|回复: 16

[已解决]测试3:实现加法。

[复制链接]
发表于 2023-1-8 22:39:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 KeyError 于 2023-1-9 12:29 编辑

请实现函数add(int a,int b) -> int,该函数返回a+b。
你不能使用+,-,*,/,//,%,if,for,while。
最佳答案
2023-3-19 08:39:32
这个简单
  1. def add(a: int, b: int) -> int:
  2.     return int(input(f'{a}+{b}=?'))
复制代码
  1. def add(a, b):
  2.      return exec(f'{str(a)}{chr(43)}{str(b)}')
复制代码

Doge
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-1-8 22:43:58 | 显示全部楼层
  1. def add(a, b):
  2.     return a.__add__(b)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
人造人 + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 01:26:54 | 显示全部楼层
不能用 '+' 这个运算符,那就自己做一个加法器

  1. sh-5.1$ cat main.py
  2. #!/usr/bin/env python
  3. #coding=utf-8

  4. '''
  5. def and_gate(a, b):
  6.     if a == 0: return 0
  7.     if b == 0: return 0
  8.     return 1

  9. def or_gate(a, b):
  10.     if a == 1: return 1
  11.     if b == 1: return 1
  12.     return 0

  13. def not_gate(a):
  14.     if a == 0: return 1
  15.     return 0

  16. def xor_gate(a, b):
  17.     if a == b: return 0
  18.     return 1

  19. def xor_gate(a, b):
  20.     w0 = not_gate(a)
  21.     w1 = not_gate(b)
  22.     w2 = and_gate(a, w1)
  23.     w3 = and_gate(b, w0)
  24.     return or_gate(w2, w3)
  25. '''

  26. def and_gate(a, b): return a & b
  27. def or_gate(a, b): return a | b
  28. def not_gate(a): return int(not a)
  29. def xor_gate(a, b): return a ^ b

  30. def half_adder_1(a, b):
  31.     s = xor_gate(a, b)
  32.     c = and_gate(a, b)
  33.     return (c, s)

  34. def full_adder_1(a, b, c):
  35.     w0, w1 = half_adder_1(a, b)
  36.     w2, w3 = half_adder_1(w1, c)
  37.     w4 = or_gate(w0, w2)
  38.     return (w4, w3)

  39. def full_adder_2(a, b, c):
  40.     w0, w1 = full_adder_1(a & 0x0001, b & 0x0001, c)
  41.     w2, w3 = full_adder_1(a >> 1, b >> 1, w0)
  42.     result = (w3 << 1) | w1
  43.     return (w2, result)

  44. def full_adder_4(a, b, c):
  45.     w0, w1 = full_adder_2(a & 0x0003, b & 0x0003, c)
  46.     w2, w3 = full_adder_2(a >> 2, b >> 2, w0)
  47.     result = (w3 << 2) | w1
  48.     return (w2, result)

  49. def full_adder_8(a, b, c):
  50.     w0, w1 = full_adder_4(a & 0x000f, b & 0x000f, c)
  51.     w2, w3 = full_adder_4(a >> 4, b >> 4, w0)
  52.     result = (w3 << 4) | w1
  53.     return (w2, result)

  54. def full_adder_16(a, b, c):
  55.     w0, w1 = full_adder_8(a & 0x00ff, b & 0x00ff, c)
  56.     w2, w3 = full_adder_8(a >> 8, b >> 8, w0)
  57.     result = (w3 << 8) | w1
  58.     return (w2, result)

  59. def full_adder_32(a, b, c):
  60.     w0, w1 = full_adder_16(a & 0xffff, b & 0xffff, c)
  61.     w2, w3 = full_adder_16(a >> 16, b >> 16, w0)
  62.     result = (w3 << 16) | w1
  63.     return (w2, result)

  64. '''
  65. print(full_adder_32(12345, 7366896, 0), 12345 + 7366896)
  66. print(full_adder_32(12745, 7471895, 0), 12745 + 7471895)
  67. print(full_adder_32(82345, 7586894, 0), 82345 + 7586894)
  68. '''

  69. def add(a, b): return full_adder_32(a, b, 0)[1]

  70. a = 13748389521
  71. b = 1912349134
  72. print(add(a, b), a + b)
  73. a = 13741234521
  74. b = 1919087134
  75. print(add(a, b), a + b)
  76. a = 93741
  77. b = 291987634
  78. print(add(a, b), a + b)

  79. a = 13748389521
  80. b = 1912349134
  81. print(add(a, b) == a + b)
  82. a = 13741234521
  83. b = 1919087134
  84. print(add(a, b) == a + b)
  85. a = 93741
  86. b = 291987634
  87. print(add(a, b) == a + b)
  88. sh-5.1$ ./main.py
  89. 15660738655 15660738655
  90. 15660321655 15660321655
  91. 292081375 292081375
  92. True
  93. True
  94. True
  95. sh-5.1$
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 07:29:18 | 显示全部楼层
2楼厉害,网上的算法还是不能符合要求:
  1. def add(a,b):
  2.     p1=a^b
  3.     p2=(a&b)<<1
  4.     while p2!=0:
  5.         temp=p1^p2
  6.         p2=(p1&p2)<<1
  7.         p1=temp
  8.     return p1
  9. print(add(3,69))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 08:26:13 | 显示全部楼层
  1. def add(a,b):
  2.     c=sum([a,b])
  3.     return c
  4. print(add(3.5,69))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 10:47:35 | 显示全部楼层
如果你对这些原理感兴趣的话,那来学底层吧
在这里什么都自己写
自己写编译器,自己写操作系统,自己写计算机!
^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 11:15:50 | 显示全部楼层
人造人 发表于 2023-1-9 01:26
不能用 '+' 这个运算符,那就自己做一个加法器

“专 业 对 口”
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 11:19:04 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-9 12:17:27 | 显示全部楼层

__add__方法已经算+了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-9 12:18:07 | 显示全部楼层
人造人 发表于 2023-1-9 01:26
不能用 '+' 这个运算符,那就自己做一个加法器

这有if。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 12:19:08 | 显示全部楼层
KeyError 发表于 2023-1-9 12:17
__add__方法已经算+了。

但是如果想写一个适用所有对象的add函数,就必须使用__add__魔法方法。否则只能指定某一类对象。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-9 12:20:08 | 显示全部楼层

不能用任何与+,-,*,/,//,%运算符有关的方法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 12:22:18 | 显示全部楼层

这个代码你看了吗?
看懂了吗?
有if吗?

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-9 13:06:34 | 显示全部楼层
KeyError 发表于 2023-1-9 12:40
答案与解析:
首先,我们的工具很少,
只有and,or,not,&,|,~,^,递归......(无法使用for,while迭代)

不至于吧?
贴代码之前要自己先运行一遍,没问题才贴的

  1. sh-5.1$ cat main.py
  2. #!/usr/bin/env python
  3. #coding=utf-8

  4. def add(int a, int b) -> int:
  5.     x = a + 0
  6.     y = b + 0
  7.     def f():
  8.         global x, y
  9.         x = ~ (- x)
  10.         y = - (~ y)
  11.         return bool(y) and f()
  12.     f()
  13.     return x

  14. print(add(1, 1))
  15. sh-5.1$ ./main.py
  16.   File "/tmp/./main.py", line 4
  17.     def add(int a, int b) -> int:
  18.                 ^
  19. SyntaxError: invalid syntax
  20. sh-5.1$ vim main.py
  21. sh-5.1$ cat main.py
  22. #!/usr/bin/env python
  23. #coding=utf-8

  24. #def add(int a, int b) -> int:
  25. def add(a: int, b: int) -> int:
  26.     x = a + 0
  27.     y = b + 0
  28.     def f():
  29.         global x, y
  30.         x = ~ (- x)
  31.         y = - (~ y)
  32.         return bool(y) and f()
  33.     f()
  34.     return x

  35. print(add(1, 1))
  36. sh-5.1$ ./main.py
  37. Traceback (most recent call last):
  38.   File "/tmp/./main.py", line 16, in <module>
  39.     print(add(1, 1))
  40.   File "/tmp/./main.py", line 13, in add
  41.     f()
  42.   File "/tmp/./main.py", line 10, in f
  43.     x = ~ (- x)
  44. NameError: name 'x' is not defined
  45. sh-5.1$ vim main.py
  46. sh-5.1$ cat main.py
  47. #!/usr/bin/env python
  48. #coding=utf-8

  49. #def add(int a, int b) -> int:
  50. def add(a: int, b: int) -> int:
  51.     x = a + 0
  52.     y = b + 0
  53.     def f():
  54.         #global x, y
  55.         nonlocal x, y
  56.         x = ~ (- x)
  57.         y = - (~ y)
  58.         return bool(y) and f()
  59.     f()
  60.     return x

  61. print(add(1, 1))
  62. sh-5.1$ ./main.py
  63. Traceback (most recent call last):
  64.   File "/tmp/./main.py", line 17, in <module>
  65.     print(add(1, 1))
  66.   File "/tmp/./main.py", line 14, in add
  67.     f()
  68.   File "/tmp/./main.py", line 13, in f
  69.     return bool(y) and f()
  70.   File "/tmp/./main.py", line 13, in f
  71.     return bool(y) and f()
  72.   File "/tmp/./main.py", line 13, in f
  73.     return bool(y) and f()
  74.   [Previous line repeated 995 more times]
  75. RecursionError: maximum recursion depth exceeded
  76. sh-5.1$
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-1-13 16:05:16 | 显示全部楼层
好像要用__add__魔法方法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 08:39:32 | 显示全部楼层    本楼为最佳答案   
这个简单
  1. def add(a: int, b: int) -> int:
  2.     return int(input(f'{a}+{b}=?'))
复制代码
  1. def add(a, b):
  2.      return exec(f'{str(a)}{chr(43)}{str(b)}')
复制代码

Doge
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 11:02:46 | 显示全部楼层

什么我搞笑一下都能最佳答案????
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 17:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表