恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

PA2(上)编程任务完整落地指南:从需求拆解到提交避坑全流程

  • 首页
  • 资讯中心
  • /
  • PA2(上)编程任务完整落地指南:从需求拆解到提交避坑全流程

相关资讯

架构决策记录(ADR)实战:architecture-decision-record 项目中的 PostgreSQL 数据库选型决策示例解析 2026/10/13 13:26:41
Flutter适配OpenHarmony实战:紧急联系人模块开发全记录 2026/10/13 13:26:41
支持向量机SVM从原理到C++/Python实现:核函数与SMO算法详解 2026/10/13 13:26:41

最新资讯

Django博客详情页重构:Markdown渲染、代码高亮与移动端适配实战
量化交易软件回测到实盘:参数调优与避坑指南
基于SpringBoot的养老服务平台毕设全攻略:从选题到答辩
Spring Boot高频面试题复盘:自动配置、启动流程与事务失效全解析
SpringBoot智慧养老平台系统设计与实现:档案、预约、健康监测全流程
西门子SICAR源码走读:从PLC分层架构到状态机与OPC UA实战

今日推荐

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析
CAN总线错误处理机制深度解析:从位错误到Bus Off的硬件级调试

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

PA2(上)编程任务完整落地指南:从需求拆解到提交避坑全流程

发布时间:2026/10/13 13:31:41
PA2(上)编程任务完整落地指南:从需求拆解到提交避坑全流程 简介一份面向计算机系统课程PA2实验的详解文档围绕指令系统取指、译码、执行的全流程展开系统讲解寄存器结构、初始化和更新方式帮助正在完成实验或学习计算机底层原理的读者快速建立指令实现框架。资源为1个PDF文件压缩包大小1.46MB内容集中于指令系统核心实现过程覆盖框架代码阅读、基本指令实现和指令细节处理。目前已有1044人学习浏览是同类实验辅导中较受认可的资料。文档不仅梳理了关键函数、译码模板与全局变量的组织方式还针对ADD/SUB、MOV/NOP、压栈与跳转等指令的操作数判断、符号扩展及程序计数器更新给出了具体实现思路并以打印变量、打印栈帧为例说明易错环节的处理。整体报告定位为实验全程手记从概述到细节层层递进既适合实验前通读也适合调试时按需查阅可作为课程设计或自主实现指令系统的直接参考。1. PA2(上)_173071301781 是什么先别急着打开代码包如果你的收件夹里出现一个叫PA2(上)_173071301781的任务包大概率你正在参加一门带实验的课程、一期企业内训或者某次阶段性考核。这个编号的意思是第二个编程任务Programming Assignment 2的上半部分后面的数字是任务发布的时间戳。拿到这种包新人最容易犯的错是立刻翻源码、找入口文件恨不得当天就跑出结果。我见过太多人栽在同一个地方代码逻辑没问题但提交时格式不对、目录结构缺文件、输出多了一行空行最后被打回重做。真正有用的起点是先把这个编号拆开搞清楚它规定了什么、测试怎么跑、交什么、以及“上”和“下”的边界在哪里。这篇文章不讲某个特定题目的解法而是给你一套能套在任何 PA2 类任务上的完整落地流程从需求拆解、环境锁定、编码实现到提交前的避坑和验证每一步都给出能直接照抄的命令和检查表。适合正在赶实验的新手也适合要带新人的熟手。2. 拿到 PA2 先别写码需求拆解与验收标准确定的三个动作2.1 先看任务包里的“上”字暗含了什么PA2(上)这个命名里最容易被忽略的就是括号里的“上”。它意味着这是一个被拆分过的任务后面大概率还有一个包下会在某个时间内被发下来也可能这个包本身只评测前半部分功能。我一般拿到包之后第一件事不是打开任何代码文件而是把压缩包里的文件清单打出来逐个看命名规律。# 列出任务包里所有文件包含隐藏文件按层级展示 find . -type f | sort # 如果你拿到的是 zip先看结构再解压 unzip -l PA2_upper_package.zip逻辑说明find会把包内所有文件路径列出来你能一眼看出有没有 README、有没有测试样例、有没有单独的输入输出目录。unzip -l只查看不解压适合先确认压缩包里有没有恶意路径或多余嵌套。参数说明-type f只显示普通文件过滤掉目录避免目录刷屏sort让输出按文件名排序方便你按编号和扩展名快速定位。看完文件清单接下来要回答三个问题。第一这个包的评测方式是给输入跑程序比对输出还是人工看代码和报告前者说明你要重点保输出格式后者说明你得多花时间写注释和文档。第二测试数据是公开在目录里的还是评测时由对方另准备“另准备”意味着你不能针对样例硬编码代码必须对同类输入都成立。第三有没有一份单独的评分细则有些包里面只写“实现某某功能”评分细则里却列出了代码风格占二十分、注释占十分。这三件事没弄清楚之前写的每一行代码都有可能白费。2.2 列一张验收矩阵把“什么算完成”写成可勾选项我之前带模拟项目组的时候总有人问“我这个算做完了吗”。我统一给的答复是去你的验收矩阵里数勾。做完拆解之后把任务的目标、输入、输出、异常情况和硬性约束列成一张二维表左边写维度右边写验收项。这张表既是你的施工图也是你提交前的自检表。维度验收项示例检查结果输入侧能正确处理空白字符边界文件不存在时有明确报错未检查处理侧对应算法的复杂度满足题设给出的数量级不依赖全局变量未检查输出侧输出格式与样例完全一致不含多余调试内容行尾无空格未检查异常侧空输入、超长输入、非法字符能退出且不崩溃未检查约束侧提交路径正确依赖清单齐全不使用禁止的函数库未检查这张表要放在项目根目录命名为checklist.md每完成一项就把“未检查”改成“通过”。注意验收矩阵不是给你自己一个人看的它还能让助教或同事在几分钟内确认你到底做到了哪一步。实际操作中很多人会遗漏“异常侧”因为他们只拿正常样例跑而评测机上一定会塞进边界输入。2.3 先问清三个环境问题再决定怎么动手代码写得再好环境不对等于零。这里的“环境”不是指你用哪个编辑器而是三个可以落到命令行的具体问题项目用哪个语言和运行版本运行依赖包有没有锁版本或锁来源任务要求用哪个命令提交。我自己处理固定的习惯做法是把这些信息直接写进一个ENV.md或者作为脚本注释放在仓库里。# 记录当前环境的版本信息生成可复现的依赖描述 python3 --version pip3 --version pip3 freeze requirements.lock # 如果任务要求固定 Node 版本 node --version npm --version逻辑说明pip3 freeze会把当前环境里所有安装过的包和精确版本号输出到文件里这就是你随时可以恢复的依赖基线。参数说明 requirements.lock是 shell 的重定向把命令输出写入文件其中锁文件建议放到仓库根部并且不要用.gitignore忽略它。如果你用的是 Java对应命令是java -version和mvn dependency:list如果是 Rust对应是cargo --version和cargo tree。关键是你要选一条能自动执行的命令来记录环境而不是在 README 里手写“我用的是 3.11”。环境问题里还有一个隐藏点任务指定的是“哪个解释器”而不是“哪个语言”。同一个 Python 代码在 3.9 能跑出结果在 3.11 可能因为字典顺序或字符串编码的差异而输出不同。所以每做一个任务我都会把运行命令固定成一种比如python3 main.py input.txt output.txt并且在所有测试里都用这一条命令避免手滑用python或者 IDE 的运行按钮。3. 把方案落成能跑的骨架环境准备与最小实现路径3.1 先做最小可运行样例让你的代码今天就能“走通”很多人喜欢把功能全部写完再开始调试结果第一轮跑出的报错能淹没半屏。我自己的流程恰好相反先搭一个最小骨架让整个调用链在十分钟内跑通再往里面填逻辑。所谓“走通”指的是命令行能启动程序程序能读取一个最简单的输入能写出一个最基础的输出退出码为 0。# main.py先实现输入输出骨架不包含任何业务逻辑 import sys def main(): # 从命令行参数获取输入输出文件路径 if len(sys.argv) ! 3: print(用法: python main.py input_file output_file, filesys.stderr) sys.exit(2) input_path, output_path sys.argv[1], sys.argv[2] # 打开输入文件逐行读取文件不存在时给出明确提示 try: with open(input_path, r, encodingutf-8) as f: lines f.readlines() except FileNotFoundError: print(f找不到输入文件: {input_path}, filesys.stderr) sys.exit(1) # 先把读到的内容原样写回输出文件后续再替换为真实逻辑 with open(output_path, w, encodingutf-8) as f: f.writelines(lines) if __name__ __main__: main()逻辑说明这个骨架强制你用命令行参数而不是写死路径保证评测脚本能把你程序接到他们准备好的输入输出目录里。sys.exit(2)和sys.exit(1)分别表示“参数错误”和“运行错误”区分开之后外面套的自动化脚本才能判断你的程序到底是没写好还是出了状况。参数说明encodingutf-8在 Windows 上尤其关键因为默认编码可能是 GBK你不写清楚中文文本就有可能出现乱码或报告解码错误。骨架跑通之后你就拥有了一个“始终能运行”的版本。后面每加一块功能都要保证程序仍然能从命令行启动、仍然能写完输出文件。一旦某次改动后程序不能正常收尾你就知道问题出在刚刚那步改动里而不需要回溯几十行代码。这是我能给的最朴素也最有效的节奏控制方法。3.2 用一份配置清单锁定“输入怎么读、输出怎么写”PA2 类任务最常见的坑不是算法写不出来而是读文件的方式和评测方预期的不一致。比如评测方期望第一行是整数 n后面 n 行是数据你却用了split()走了全量读入一旦行尾有空格多读出一个空字符串整个程序就乱了。我在搭骨架的同时会建一个config.yaml把 I/O 约定明确写下来。# config.yaml记录任务中输入输出格式约定 task: id: PA2_part1 submission_time: 173071301781 io: input_encoding: utf-8 line_ending: \n # 统一使用 LF避免 Windows CRLF 干扰 first_line_rule: T # 首行为测试用例数量 field_separator: # 字段分隔符为单个空格 output_ending: each_line_newline # 每行输出后必须换行 empty_output_on_no_input: true逻辑说明把格式约定单独立成配置比写在代码注释里更直观也方便你在提交前和 README、样例逐个比对。参数说明line_ending: \n表示你写输出时明确换行符为 LF这样即便在 Windows 上写代码最终输出也不会被转换成\r\nfield_separator和first_line_rule这两个字段决定了读取时用split()还是splitlines()以及是否要单独读首行。注意此处的 YAML 是为了让你自己对齐约定最终提交时不一定需要交给评测方。输出侧的约定往往比输入侧更严格。我开始带人时发现新人常犯的毛病是开发时为了方便把调试信息打印到 stdout比如“处理完成共用时 0.2 秒”之类的话。真正的交付标准是stdout 要么完全干净要么只输出评测方要求的内容任何多余信息都会让比对脚本判为失败。正确思路是把调试信息写到 stderr评测方不会管 stderr 写了什么但你能保留全部的运行日志。3.3 定一个版本管理基线时刻第一次能跑就立刻存档很多人完成一个代码文件之后从来不存档改了三五版发现回不去了只能凭记忆重写。我自己的规则是程序第一次完整跑通所有公开样例的那一刻就做一个版本存档。这个基线意味着你有了一个确定可回退的起点后面的性能优化、代码重构都有后悔药。# 初始化仓库并完成第一次提交 git init git add main.py config.yaml requirements.lock README.md git commit -m PA2 upper part: minimal runnable baseline逻辑说明git init在当前目录初始化仓库git add把刚才最小骨架相关的文件放入暂存区git commit生成第一个版本快照。参数说明-m后面跟提交信息这里写的是“PA2 upper part: minimal runnable baseline”信息里包含任务名和阶段方便日后翻日志时能快速定位。有了这个 commit你再怎么折腾一个git reset --hard HEAD就能回到今天这个状态。需要注意的是提交基线时不应该把data/或result/这类数据目录包含进去除非任务包明确要求提交这些。我的做法是写一个.gitignore把__pycache__/、*.pyc、data/、result/全部过滤掉。评测方的输入输出数据可能包含大文件一旦误提交仓库体积会撑得很大而且可能因为带了缓存文件导致对方在评测时发现结构不一致。4. 调试与提交避坑PA2 最常见的五类翻车现场4.1 现象本机能出结果提交到评测机就说“运行错误”这大概是 PA2 类任务里出现频率最高的一个翻车现场。原因往往不在你的算法而在环境差异你本地的 Python 是 3.11依赖包是刚装的最新版而评测机的解释器是老版本或者根本没有装第三方库。解决的办法分两步第一步把所有依赖写进requirements.lock并随包提交第二步在 README 里写清楚最低运行版本要求同时不要依赖某个库的“巧合特性”。另一个隐蔽原因是当前工作目录的问题。你的程序如果写了open(data.txt)评测脚本可能在项目根目录执行也可能在子目录执行相对路径就解释不通。解决方法是在你的 main 函数开头统一用sys.argv里的输入输出路径不要依赖任何“运行时的当前目录”。这一条可以做到拿到任何任务都直接规避掉一大半环境问题。4.2 现象输出内容看着跟样例一样但是比对不过这是逼疯过很多人的问题。肉眼看着一样字节级比对却失败最常见的三个隐藏差异行尾变了、文件末尾多一个换行、行内有不可见空格。不同编辑器、不同操作系统对这几件事的处理方式完全不同。解决思路是写一个字节级的自检脚本把程序输出文件和期望答案做一次精确比对。# 对输出文件和期望答案做逐字节比对并显示第一个不同位置 cmp -l output.txt expected.txt # 查看输出文件有没有额外的回车符号 cat -A output.txt | head -20逻辑说明cmp -l会列出所有字节位置和不同的字节值cat -A会把制表符显示为^I、把行尾的$显示出来你可以直接看到每行结尾是否干净。参数说明管道head -20是只显示前 20 行防止输出文件很大导致终端刷屏。如果你用的是 Python也可以用diff或filecmp.cmp()做同类比对。这个自检脚本要放在项目根目录每完成一次修改就手动跑一遍。4.3 现象中文输入没问题换成英文输入就乱码或反过来这类问题基本都出在编码判定上。有的同学在读取文件的时候用系统默认编码在 Windows 上就可能是 GBK 或 ANSI而在 Linux 上则是 UTF-8。评测方给的测试数据不论中文还是英文通常都有明确的编码说明如果没说明我默认按 UTF-8 处理并且在打开文件时显式传encoding绝不省略这个参数。如果你发现样例文件自带 BOM 头utf-8会把 BOM 当作字符读进来导致输出多出奇怪字符那你应该用utf-8-sig读取。另一个常见问题是 print 出去的时候终端能正常显示但重定向到文件后变成乱码。这是因为 IDEA 或 PowerShell 的终端编码和文件编码不一致。解决办法是输出文件用字符流写入时统一encodingutf-8尽量不依赖环境变量里的PYTHONIOENCODING。4.4 现象小数据全对换大数据超时算法复杂度在公开样例上暴露得最慢。评测方拿小数据让你跑通但真正的分数区分度都在大数据上。这类翻车不是程序错误是设计缺陷。解决要靠两点第一提前估算规模看题设里 n 的取值范围第二在本地主动构造一个最大规模的测试数据测一下耗时。# gen_large_input.py生成一份大数据输入帮你提前暴露性能问题 import random n 50000 with open(large_input.txt, w, encodingutf-8) as f: f.write(f{n}\n) # 写首行测试案例数量 for _ in range(n): f.write(f{random.randint(1, 1000000)}\n)逻辑说明这份生成器只做一件事把输入规模拉到题设上限附近让你提前感受“测试数据量大起来之后”程序会不会卡死。参数说明random.randint(1, 1000000)的值域根据你的任务内容可改关键是规模要足够接近评测上限。多数暴力解在 5 万条数据时还可能勉强秒出到 50 万条就会坠崖而你提前验证之后就知道要不要换更好的算法或优化常数。4.5 现象提交包解压后找不到 main 文件或者多了一堆无用文件这类现象属于交付形态问题。你本地跑得好好的压缩时却把整个目录连同一个__pycache__一起打了进去对方解压后运行python main.py发现 main 文件在深层子目录里或者因为你的路径写死对方没找到输入文件。解决办法是提交前重新从压缩包解压到全新目录严格按照 README 里的命令行运行一遍并确认目录结构跟提交要求一致。# 在干净目录里模拟评测方行为 mkdir -p /tmp/pa2_clean unzip PA2_upper_package.zip -d /tmp/pa2_clean cd /tmp/pa2_clean python3 main.py sample_input.txt sample_output.txt逻辑说明mkdir -p创建全新目录unzip -d把提交包解压到指定位置cd进去之后用相对路径执行。如果你在这个“无干扰”环境里能通过一遍提交物才算真正准备好。参数说明/tmp目录在系统重启后会被清空适合做这种一次性验证如果你在 Windows 上可以用系统临时目录代替。这一招必须放在所有事务的最后一步因为它模拟的就是评测方拿到压缩包后的实际行为。5. 从能跑通到做得像样代码质量、测试与文档的交付标准5.1 测试用例怎么补只跑通样例远远不够大多数人对“测试”的理解是把任务包里的公开样例跑一遍全过就万事大吉。但公开样例往往是“快乐路径”全是合法输入数据规模也小。真正的评价体系里边界输入才是拉分项。你要主动构造四类测试数据空输入、单条数据、最大规模数据、含非法字符的输入。每类数据配一个期望输出写成一个自动化测试脚本。# 建议的项目测试目录结构 test/ case_empty_input.txt case_single_line.txt case_max_size.txt case_illegal_char.txt run_all_tests.sh#!/bin/bash # run_all_tests.sh批量执行所有测试用例并比对输出 for input in test/case_*.txt; do base$(basename $input .txt) python3 main.py $input test_output/${base}_out.txt if diff -q test/${base}_expected.txt test_output/${base}_out.txt /dev/null; then echo PASS: $base else echo FAIL: $base diff test/${base}_expected.txt test_output/${base}_out.txt fi done逻辑说明脚本遍历test/目录下所有case_*.txt文件每个输入文件都去跑一次主程序然后把输出文件和同名_expected.txt比对。参数说明diff -q只报告是否不同不输出具体差异适合快速看通过率 /dev/null丢弃 diff 的正常输出只有失败时才在 else 分支里打印完整差异。这里的base变量是取出文件名去掉了路径和扩展名用来把输入、输出、期望三个文件配对。建这套测试的价值不只是让你安心它还能在改代码的时候给你兜底。你觉得“顺手重构了一下”跑一遍测试脚本如果之前通过的用例开始挂掉说明你在某个角落改了不该改的语义。这个反馈速度快到可以省下你一下午的排查时间。5.2 代码可读性别人要能读懂你的 PA2评估一个 PA2 交付物的质量代码能跑只是底限可读性往往占总分的两到三成。这里没有玄学就是三件事函数拆得够不够小、命名是不是一看就懂、有没有用注释解释“为什么这么写”。# 对比含义不明的命名 vs 清晰的命名 # 不推荐 def proc(d, f): r [] for x in d: if x[2] f: r.append(x) return r # 推荐 def filter_items_above_price(items, price_threshold): 返回价格高于阈值的商品列表。 保留原始顺序不修改传入列表。 return [it for it in items if it[2] price_threshold]逻辑说明前一个版本的函数名、参数名全是缩写只有写的人自己看得懂后一个版本把“过滤商品”“阈值”直接放在名字里读代码的人不需要猜。参数说明items是待过滤列表price_threshold是价格下限两个名字对应真实业务语义。注释里写的是“为什么”和“边界条件”而不是把代码翻译成中文。阅读代码的人不只是评分者还有三天后的你自己。这个任务你今天写完隔一周再回头加功能看到那堆proc(d, f)的时候你会恨不如当时多敲几个字母。这也是我在带新人时最先纠正的习惯。5.3 文档与运行说明的最佳结构一份好的 README 不需要长但必须回答四个问题怎么装、怎么跑、项目结构是什么、已知限制是什么。我见过很多 README 写成了“项目介绍”连一个启动命令都没有也见过写了启动命令但是命令和实际代码对不上的。交付文档的原则是每个命令都从 README 复制粘贴执行如果出错文档要背锅。# PA2 上半部分 运行说明 ## 环境要求 - Python 3.10 - 无第三方依赖标准库实现 ## 运行方式 python3 main.py input_file output_file 示例 python3 main.py data/input.txt data/output.txt ## 目录结构 main.py 主程序入口 config.yaml I/O 格式约定 test/ 测试用例与期望输出 run_all_tests.sh 一键测试脚本 ## 已知限制 - 输入文本按 UTF-8 读取 - 数据规模超过 50 万条时未做专门优化逻辑说明这份文档把环境、命令、结构、限制四件事都说清楚了没有一句废话。参数说明已知限制这段不要省你诚实写出“未优化大数据”比评测时超时才被发现要好得多。而且很多评分规则里诚实标注限制不会被扣分反而体现你对程序边界有认知。6. 收尾技巧用一份提交前自检把最后一分拿到手最后一个阶段所有功能都已经跑通测试也通过了但我还会留出半小时专门做“提交前自检”。这个习惯帮我避免过太多次“啊我忘了把某文件放进去”的问题值得形成肌肉记忆。第一步检查提交包的文件名。任务要求叫PA2_upper_package.zip你的包就必须一分不差地叫这个名字多一个小写字母、多一个空格都不行。我会用一个命令把文件名固定在目标值上而不是手动在压缩工具里敲。# 把当前目录内容打包文件名严格按任务编号命名 zip -r PA2_upper_package.zip main.py config.yaml README.md requirements.lock test/ -x __pycache__/* *.pyc逻辑说明zip -r递归压缩目录中所有文件-x排除缓存和编译产物。参数说明__pycache__/*匹配 Python 缓存目录*.pyc匹配编译过的字节码文件这两个是提交包里最不该出现的东西。如果你在 Windows 环境没有 zip 命令我建议用 PowerShell 的Compress-Archive或者干脆装一个 Git-Bash 配套环境来跑这类命令。第二步在新目录里按 README 的命令做“最终验收”而不是在开发目录里。开发目录里你的 IDE 可能给你塞了环境变量你当前所在的目录也可能暗含某个测试数据所以它能过不代表对方能过。全新目录解压、全新终端、一条命令跑完匹配上样例输出这一步过了才能提交。第三步把运行结果文件清掉再压缩。这一点非常关键因为评测脚本一般会在运行时创建输出目录但如果你把上一次运行生成的output.txt也塞进了提交包对方解压时可能因为文件已存在而跳过生成步骤直接拿你的结果参与比对——这是最严重的作弊嫌疑来源。我一般会在压缩前执行rm -rf test_output/ result/之类清理命令保证包里只有源码和约定文件。最后把整份流程沉淀成一个记录。PA2(上)_173071301781这个编号代表的任务可能只占到你整个学期或者整个项目考核的一小部分但这一小部分里踩过的坑比如编码、路径、输出格式会在下一个任务里原样出现。我随身保留一个notes.md每次翻车就写一行“现象是什么、怎么修好的”。到了下学期别人还在为编码问题排查两小时你在自己的笔记里搜一个“乱码”关键词就能直接拿到答案。希望这套方法能帮你在下一次收到编号任务时从拆包到提交都照着顺利走一遍。祝你有惊无险地交出那份能拿满分的 PA2。本文还有配套的精品资源点击获取

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号