PHP/Python实现相邻求和取个位的金字塔数字计算
金字塔数值计算程序实现方案
规则中两数求和后反复相加至个位数的逻辑,可直接通过数根公式简化计算,无需循环逐位累加:对于两数之和s,若s == 0结果为0,若s % 9 == 0结果为9,其余情况结果为s % 9,计算结果和逐位累加逻辑完全等价。
Python 实现
def calc_pyramid_num(input_str: str) -> None: # 校验输入为纯数字格式 if not input_str.isdigit(): print("输入必须为纯数字字符串") return current = input_str level = 1 while True: print(f"第{level}层:{current}") # 长度为2时终止迭代 if len(current) == 2: break next_layer = [] # 遍历所有相邻数字对 for i in range(len(current) - 1): a = int(current[i]) b = int(current[i+1]) s = a + b # 计算单数字结果 if s == 0: res = 0 elif s % 9 == 0: res = 9 else: res = s % 9 next_layer.append(str(res)) current = ''.join(next_layer) level += 1 # 测试示例 输入12345 if __name__ == "__main__": calc_pyramid_num("12345")
代码运行输出:
第1层:12345 第2层:3579 第3层:837 第4层:21
和参考计算结果完全匹配。
PHP 实现
<?php function calcPyramidNum(string $inputStr): void { // 校验输入为纯数字格式 if (!ctype_digit($inputStr)) { echo "输入必须为纯数字字符串\n"; return; } $current = $inputStr; $level = 1; while (true) { echo "第{$level}层:{$current}\n"; // 长度为2时终止迭代 if (strlen($current) == 2) { break; } $nextLayer = []; $len = strlen($current); // 遍历所有相邻数字对 for ($i = 0; $i < $len - 1; $i++) { $a = intval($current[$i]); $b = intval($current[$i+1]); $s = $a + $b; // 计算单数字结果 if ($s == 0) { $res = 0; } elseif ($s % 9 == 0) { $res = 9; } else { $res = $s % 9; } $nextLayer[] = strval($res); } $current = implode('', $nextLayer); $level++; } } // 测试示例 输入12345 calcPyramidNum("12345"); ?>
上述PHP代码运行输出和Python版本完全一致,符合所有计算规则。
如果不想使用数根公式,也可以在得到两数之和后,循环判断和是否大于等于10,若大于等于10则拆分各位相加直到结果为个位数,逻辑效果完全相同,数根公式仅用于减少循环步骤、提升计算效率。
内容的提问来源于stack exchange,提问作者qaiserjutt
相关产品推荐
相关产品推荐

