获取INT中的数字数,而无需分开10
Get number of digits in an int without divided by 10
有没有办法在没有划分的情况下获得数字数量?
例如,我有这个:
int main()
{
int dividend = 100;
int remainder=0;
int temp = 0;
while(dividend>=10)
{
dividend = dividend-10;
temp+=1;
}
printf("Quotient: %dn",temp);
printf("Reminder: %dn",dividend);
}
现在,我将添加以计算可变股息的数字数量。
您必须知道使此函数有用的最大整数范围。无功能调用,没有分区...
int nbDigitInteger(int number)
{
if (-10 < number && number < 10) return (1);
if (-100 < number && number < 100) return (2);
if (-1000 < number && number < 1000) return (3);
if (-10000 < number && number < 10000) return (4);
if (-100000 < number && number < 100000) return (5);
...
}
有时候,更简单是最好的。
如果允许使用对数,则
int i = 123456;
int digitsCount = ceil(log10(abs(i)+1.0));
cout << digitsCount;
6
您的问题太宽了,代码也无关。
由于您试图发布代码,我将为您所要求的问题提供指南。自己写代码。
- 采用绝对整数值。(
abs()
( - 将其打印到(足够大的(缓冲区。(
sprintf()
/snprintf()
(。 - 使用
strlen()
获取缓冲区的长度(如字符串(。
是非常优雅的解决方案o @yola的替代方案。
intPow10
将10返回到功率exponent
。我没有使用math.h
中的pow
,因为它在数字上很昂贵,正如 @汤姆指出的那样,它可能导致无效的结果。
#include <stdio.h>
#include<math.h>
int intPow10(int exponent){
int retval=1;
while (exponent){
retval *=10;
exponent --;
}
return retval;
}
int numDigits(const int i) {
int digits = 1;
while (intPow10(digits) <= fabs(i)) {
digits++;
}
printf("%i has %i digits.n", i,digits);
return digits;
}
int main() {
numDigits(1);
numDigits(-1);
numDigits(10);
numDigits(13);
numDigits(-112312);
}
这个代码高尔夫是什么?
int b = 1000;
char a[10] = itoa(b);
printf("%dn", strlen(a)); // 4
这只是将B变成一个字符串,即然后,打印长度。没有ATOI((和ITOA((,我们该怎么办?我们自己的功能!
相关文章:
- 为什么将双精度转换为 int 似乎在第 16 位数字之后将其四舍五入?
- 整数区间(或 int 数组)中每个数字的出现次数
- 必须首先打印向量 v1 中最接近整数 x 的数字<int>
- 无符号的 int 到有效数字
- 返回 int 中可被 2 c++ 整除的所有数字的总和
- C++ - 将 int 读取为字母和数字序列
- 如何安全地将有符号字段从uint32_t提取到有符号数字(int或uint32_t)中
- 如果char可以在C++中存储数字,为什么我们需要int
- 检查字符串是否是数字,然后将该数字转换为 int?
- C++在减去 int 时向 int 添加一个额外的数字
- 如何使用 c++ 中的 int* count(const string&s)计算字符串中每个数字的出现次数?
- 当我将 const int 声明/初始化为 5 时,它被初始化为一个大数字
- 如何将int分解为数字并以相同的顺序为向量分配数字
- 从C 到C#调用INT []显示随机大数字,而不是原始数组成员
- 如何将 int 的数字分配给数组 c++
- 如何正确编码此函数,以便它计算 int 的每个数字的总和
- C++ 从文件中读取 int,每个数字用逗号分隔
- 如何将INT数字[1]的值与数字[2] C 进行比较
- int数字中的十六进制*字符
- C++格式化int数字,用一个点分隔数千