2014-02-26 54 views
0

我正在寫Luhns算法,我需要輸入一個10位數的數字,因爲它足夠大以容納一個10位數的數字,所以我在考慮使用一個雙數,但是隨後我需要將加倍成單個數字並將它們輸入到數組中。雙數轉換爲數組的一個數字

這裏是我想要做的一個例子:

input a 10 digit number 
double num=7992739871 
convert to single digits 
int *array={7,9,9,2,7,3,9,8,7,1} 

現在我不知道,如果輸入的號碼作爲雙是最好的選擇,但它似乎是最明顯的選擇,任何幫助不勝感激!

+0

一般來說'array [n] =(num/10 ^(9-n))%10' –

回答

1

一個更簡單的方法做,這是剛剛在std::string閱讀:

std::string num; 
std::cin >> num; 

可以使用std::isdigitnum.size(),以確保輸入的是正確的格式做一些檢查。然後,每個字符僅爲num[0] - '0',num[1] - '0',依此類推。例如,下面將工作:

auto not_digit = [](char c) { return !std::isdigit(c); }; 
auto nondigit_iter = std::find_if(num.begin(), num.end(), not_digit); 

if (num.size() == 10 && nondigit_iter == num.end()) { 
    std::array<int, 10> digits; 

    auto digit_to_value = [](char c) { return c - '0'; }; 
    std::transform(num.begin(), num.end(), digits.begin(), digit_to_value); 

    // Now digits contains the 10 values 
} 

你是幸運的,你給了作爲一個例子值是double實際上表示的。並非所有double範圍內的整數都是可表示的。一般來說,如果你真的需要整數值,那麼你想使用整數類型。但是,在這種情況下,您真正​​需要的是一個10位數字序列,而不是10位數字值,因此您最好使用std::string

0

您可以使用/ 10% 10將數字拆分爲數字。

該實施例說明如何找到一個長號碼的數字:

  • 2368/10 ==> 236
    • 236/10 ==> 23
      • 23/10 ==>
      • 23 % 10 ==>
    • 236 % 10 ==>
  • 2368 % 10 ==>
0

像這樣的東西應該工作(不編譯):

int *array = new int[log10(num)]; 
int temp = int(num); 
for(int i=0;temp != 0; i++){ 
    array[i] = temp%10; 
    temp = temp/10; // Integer division 
} 
0

嘗試像這個: -

int *array[10]; 
int num; 
cin>>num; 
for (int i =10; i >= 0; i--) { 
    array[i] = num % 10; 
    num /= 10; 
}