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