如何不使用除以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




