倒着输出
约 8 分钟
因为低位存在下标 0,真正的最高位在下标 len-1,所以输出要从数组末尾往前打印,才能得到人读的顺序。
// 先去掉高位多余的 0
while (len > 1 && c[len - 1] == 0) len--;
// 从高位往低位输出
for (int i = len - 1; i >= 0; i--)
cout << c[i];
cout << '\n';
为什么会出现多余的零?减法里 ,高位算出来的两个 0 得去掉;加法里若把 len 估长了也会留下前导零。但要留一个底线:len > 1 这个条件保证结果恰好是 0 时还能打印出一个 0,不会把它也删掉变成空行。
坑:(1)去零的循环条件必须是 len > 1 而不是 len > 0,否则结果为 0 时输出为空;(2)别在数字中间去零,只去最高位那一串;(3)输出方向和存储方向相反,写反了会得到整个数字颠倒的错误答案。这一步和倒着存是配套的。
小纸条
为什么会出现多余的零?
登录 后可看答案