背景:
诸如现实世界中的基本加法和乘法之类的标准运算数学工作如下:
12 + 123 = 135
和
12 * 123 = 1476
那没意思,很无聊!许多学校已经将其解释为实践,实践,形式算法的实践。这意味着非常僵化和无聊的数学饮食,而不是此挑战的目的。准备在我们钟爱的网站上玩一些乐趣。
考虑将两个正整数相加,然后再次将其结果的所有数字相加的过程。重复加法运算直到仅获得一位数字。例如:
- 的结果
12 + 123
是135。 - 将得到的所有数字135相加
1 + 3 + 5 = 9
。
在此重复加法中获得一位数字值9所需的步数为2。
与前面的加法过程一样,两个正整数相乘遵循相同的过程。将结果的所有数字相乘,然后重复此过程,直到只剩下一个数字。拿上面的例子:
- 结果
12 * 123
是1476。 - 将得到的所有数字1476相乘
1 * 4 * 7 * 6 = 168
。 - 再次乘以我们获得的所有168位数字
1 * 6 * 8 = 48
。 - 再次乘以我们获得的所有48位数字
4 * 8 = 32
。 - 再次乘以32得到的所有数字
3 * 2 = 6
。
要获得此一位乘法的单位数字6所需的步数为5。
为了这个挑战,并避免滥用数学符号,我介绍了这两种虚拟符号:(+)
和(*)
,但是您可以使用任何喜欢的符号,它们的工作方式如下:
- 重复加法运算以获得单个值的操作为
12 (+) 123 = 9
。 - 重复乘法过程以获得单个值的运算为
12 (*) 123 = 6
。
挑战:
面临的挑战是编写一个程序或一个函数,它可以执行如背景技术部分所述的两种操作:(+)
和(*)
。
输入:
程序或函数的输入是两个正整数,一个运算符是(+)
和(*)
。输入的格式是程序员的任意选择。例如,您可以设置输入的格式,a (+) b
也F(a, (+), b)
可以设置任何格式。
输出:
程序或函数的输出必须包含操作结果以及自由样式格式所需的步数。
测试用例(忽略输入和输出格式):
81 (+) 31 --> (4 ; 2)
351 (+) 14568 --> (6 ; 3)
21 (*) 111 --> (8 ; 3)
136 (*) 2356 --> (0 ; 2)
通用规则:
- 这是代码高尔夫球,因此最短的答案(以字节为单位)将赢得挑战。
不要让esolangs阻止您发布使用常规语言的答案。通过提供尽可能短的编程语言答案来应对这一挑战。如果您发布了一个巧妙的答案并给出了清晰的解释,则无论您使用哪种编程语言,您的答案都会受到赞赏(并因此而得票)。 - 标准规则适用于您的答案,因此允许您使用STDIN / STDOUT,具有适当参数的函数/方法,完整程序等。选择由您选择。
- 如果可能,您的程序可以正确处理大量数字。如果没有,那就很好。