You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何不使用除以10的方法计算整数位数?含代码改造需求

不除以10获取整数位数的方法,附代码修改方案

当然有啦!除了除以10的常规操作,还有好几种思路可以计算整数的位数,我给你整理几个实用方案,顺便把你提供的C代码加上位数计算的功能~

几种非除法的位数计算方法

1. 对数计算法

利用数学中对数的性质:对于正整数n,它的位数等于floor(log10(n)) + 1。不过要注意处理n=0的特殊情况(0的位数是1),而且需要引入<math.h>头文件。

示例代码:

#include <stdio.h>
#include <math.h>

int getDigits(int num) {
    if (num == 0) return 1;
    return (int)floor(log10(num)) + 1;
}

2. 字符串转换法

把整数转换成字符串,直接取字符串的长度就得到位数了,这个方法非常直观,不需要复杂的数学运算。

示例代码:

#include <stdio.h>
#include <string.h>

int getDigits(int num) {
    char buf[20]; // 足够容纳int范围的数字
    sprintf(buf, "%d", num);
    return strlen(buf);
}

3. 减法累加法(无除法/对数)

类似你代码里的减法思路,不过换成不断减去10的幂次(10、100、1000...)来统计位数,全程只用减法和比较:

示例代码:

#include <stdio.h>

int getDigits(int num) {
    if (num == 0) return 1;
    int count = 0;
    int power = 1;
    while (num >= power) {
        count++;
        power *= 10; // 这里是乘法,不是除法哦
    }
    return count;
}

给你提供的代码添加位数计算功能

注意你的原代码里循环会修改dividend的值,所以要先保存原始的被除数,再计算位数。修改后的完整代码如下:

#include <stdio.h>
// 如果用对数法的话需要加#include <math.h>

// 先定义一个位数计算函数,这里用减法累加法为例
int getDigits(int num) {
    if (num == 0) return 1;
    int count = 0;
    int power = 1;
    while (num >= power) {
        count++;
        power *= 10;
    }
    return count;
}

int main() { 
    int original_dividend = 100; // 保存原始值用于计算位数
    int dividend = original_dividend; 
    int remainder=0; 
    int temp = 0; 

    while(dividend>=10) { 
        dividend = dividend-10; 
        temp+=1; 
    } 

    // 新增的位数输出
    int digit_count = getDigits(original_dividend);
    printf("Original dividend digits: %d\n", digit_count);
    
    printf("Quotient: %d\n",temp); 
    printf("Reminder: %d\n",dividend); 
}

运行这段代码会输出:

Original dividend digits: 3
Quotient: 10
Reminder: 0

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

火山引擎 最新活动