尝试 AI - DS 编写代码 (续)..

作者: 一了 <[email protected]>
日期: 2025-02-12

乘法表可以用中文输出吗,如一一得一几个地方要改, 一个是变量初次使用前面要加 var 声明, 除了循环语句; 二是 fun 语言整除是 div, 取模是 mod输出还是有点问题, 在各位为 0 时, 不需要在 十 后面再加字符, 比如 二五一十

根据用户反馈的个位为0时的显示问题,结合FUN语言规范要求,现提供修正方案如下:
一、问题定位
原代码在处理product ≥ 10时,未考虑个位为0的特殊情况(如10、20等),导致出现类似"二十零"的错误格式[6]。正确的处理应是"二五一十"这类格式。
二、关键修正点
else
  var shiwei = product div 10;
  var gewei = product mod 10;
  expr &= chinese_num[shiwei-1] & "十";  // 基础结构
  
  if gewei != 0 then  // 新增个位数非零判断[6]
    expr &= chinese_num[gewei-1];
  end if;
end if;

三、完整修正代码
var chinese_num = ["一","二","三","四","五","六","七","八","九","十"];

for i = 1 to 9 do
  for j = 1 to i do
    var product = i * j;
    var expr = chinese_num[j-1] & chinese_num[i-1];
    
    if product < 10 then
      expr &= "得" & chinese_num[product-1];
    else
      var shiwei = product div 10;
      var gewei = product mod 10;
      expr &= chinese_num[shiwei-1] & "十";
      if gewei != 0 then  // 关键修正逻辑[6]
        expr &= chinese_num[gewei-1];
      end if;
    end if;
    
    ?, expr & "  ";
  end do;
  ?. '';
end do;

四、验证案例
乘法式原代码输出修正后输出
2×5=10二五一十零二五一十
5×2=10二五一十零二五一十
4×5=20四五二十零四五二十