You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

log_entier函数计算异常导致冒泡排序步骤输出格式错误排查

问题分析与修复:log_entier函数返回值错误导致冒泡排序输出格式异常

核心问题根源

你的log_entier函数实现存在逻辑错误,导致输入9时返回2而非预期的1。最常见的原因是误用了自然对数函数log()而非以10为底的对数函数log10(),或者循环计数逻辑多算了一次。

比如典型的错误实现(使用自然对数):

#include <math.h>
int log_entier(int n) {
    return (int)log(n); // log(9)≈2.197,强制转int后得到2
}

自然对数log(n)计算的是底数为e的对数,而非你需要的底数为10的对数,这直接导致了返回值偏差。

针对性修复方案

根据你的需求(输入9返回1,推测是要计算数字的位数,而非严格的对数整数部分),推荐两种可靠的实现方式:

方案1:基于循环的位数计算(无浮点精度问题)

这种方式完全避免浮点运算的精度误差,适合所有正整数输入:

int log_entier(int n) {
    int digit_count = 0;
    while (n > 0) {
        digit_count++;
        n = n / 10;
    }
    return digit_count; // 输入9返回1,输入99返回2,符合预期
}

方案2:修正对数函数的使用(若确实需要对数整数部分)

如果你的需求是计算以10为底的对数的整数部分(比如输入9预期返回0,输入10预期返回1),则改用log10():

#include <math.h>
int log_entier(int n) {
    return (int)log10(n); // log10(9)≈0.954,转int后得到0
}

注:如果你的实际需求是数字位数,方案1更稳妥,因为浮点运算在处理极大整数时可能出现精度丢失。

修复后的效果

修正log_entier函数后,print_digits会生成正确的空格数,冒泡排序步骤输出的第9步格式将与预期一致。


内容的提问来源于stack exchange,提问作者TexDuinoCpp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 00:13:15