怎么检查号码?

时间:2010-05-14 09:19:24

标签: c++

有谁能告诉我如何查看我从* b获得的号码?我希望知道这个数字的每一部分,例如,如果这个表达式的结果是25,我想知道第一个数字是2,第二个数字是5。

7 个答案:

答案 0 :(得分:5)

也许有点矫枉过正......但即使是双打也是如此

#include <sstream>
#include <iostream>

int main()
{
    double a = 5.2;
    double b = 7;
    double z = a*b;

    std::stringstream s;
    s << z;

    for (int i = 0; i < s.str().length(); i++)
        std::cout << i << ": " << s.str()[i] << std::endl;

    return 0;
}

答案 1 :(得分:3)

a mod 10 == last digit of a
a / 10 == a without its last digit

所以,对于25:

25 % 10 == 5 => 5 is the last digit of 25
25 / 10 == 2
2 % 10 == 2 => 2 is the first digit of 25

您可以在while循环中使用这些来获取每个数字。

while (num > 0)
{
    digit = num % 10;
    // digit is now the current digit, counting from the right towards the left.
    num /= 10;
}

答案 2 :(得分:2)

你必须以十的适当幂来得到整数除法的结果。

int exp = std::floor( std::log10( num ) );
int first_digit = num / int( std::pow( 10.0, exp ) );

这是一种(低效)直接获得第一个数字的方法。从最后一个开始迭代会更好。

答案 3 :(得分:2)

int val = res;

while( val > 0 )
{
   std::cout << val % 10 << endl; 
   val /= 10;
}

答案 4 :(得分:1)

char str[30];
sprintf(str,"%d",a*b);
int ndigits = strlen(str);

你在字符串中有所有数字的数字,以及ndigits中的数字位数。

e.g。如果a * b = 25,你得到

ndigits==2
str[ndigits-1]=='5'
str[ndigits-2]=='2'

你想要什么?

答案 5 :(得分:1)

这里可能存在潜在的误解。乘法的结果很可能是0x00000019。 (前导零的数量将不同)。第二步,将其转换为规范小数将产生"25"

重要的是要意识到,与普通人类不同,计算机不会以十进制形式进行数学运算。因此,如果你想检查一个属性,比如“最后十进制数字的数字”,它就不能直接供他们使用。

答案 6 :(得分:0)

请记住,例如2101基本上只是2 * 10 ^ 3 + 1 * 10 ^ 2 + 0 * 10 ^ 1 + 1 * 10 ^ 0。