2010-05-14 40 views
1

任何人都可以請告訴我如何檢查我從* b獲得的號碼?我想知道這個數字的每個部分,例如,如果這個表達式的結果是25,我想知道第一個數字是2,第二個數字是5。如何查看號碼?

+0

什麼是「* b」? – 2010-05-14 09:22:03

+2

if(result == 25) – 2010-05-14 09:22:52

+0

@drelihan,如果結果等於26,結果如何? – 2010-05-14 09:25:02

回答

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; 
} 
+0

簡單但有效:) – UncleZeiv 2010-05-14 11:29:43

+0

有一個'.'的地方:) – 2010-05-14 12:48:31

2

你必須得到十的適當冪的整數除法的結果。

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

這是一種(低效率)的方式來直接獲取第一個數字。從最後開始迭代會更好。

+0

是的,這將解決單位部分的問題,但如何得到幾十和幾百等?我想也許有些轉變會有所幫助。 – 2010-05-14 09:26:17

2
int val = res; 

while(val > 0) 
{ 
    std::cout << val % 10 << endl; 
    val /= 10; 
} 
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; 
} 
1
char str[30]; 
sprintf(str,"%d",a*b); 
int ndigits = strlen(str); 

有你有字符串中的值的所有數字,數字在ndigits的作品數量。

例如如果a * b = 25,您會得到

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

您想要這樣做的目的是什麼?

0

請記住,例如, 2101基本上只有2 * 10^3 + 1 * 10^2 + 0 * 10^1 + 1 * 10^0。

+0

錯了。'1234/10^2'會給你'12',而不是第二位的數字 – IVlad 2010-05-14 09:32:10

+0

是的,我看到了,現在我試圖修復它。 – InsertNickHere 2010-05-14 09:35:08

+0

你最初非常接近:)。你可以用'(num/10^k)%10'來獲得第k個數字。 – IVlad 2010-05-14 12:03:34

1

這裏可能存在潛在的誤解。乘法的結果很可能是0x00000019。 (前導零的數量將不同)。第二步,將其轉換爲規範十進制將產生"25"

重要的是要認識到,與正常人類不同,計算機不會用十進制來表示他們的數學,而是用二進制來表示。因此,如果您想查看「最後十進制數字」等屬性,則不能直接提供給他們。