2011-01-06 67 views
9

每個數字我有一個整數:C++獲得INT

int iNums = 12476; 

現在我想從iNums爲整數時,每個數字。例如:

foreach(iNum in iNums){ 
    printf("%i-", iNum); 
} 

所以輸出結果是:「1-2-4-7-6-」。 但我實際上需要每個數字作爲int而不是char。

感謝您的幫助。

回答

-6
int iNums = 12345; 
int iNumsSize = 5; 
for (int i=iNumsSize-1; i>=0; i--) { 
    int y = pow(10, i); 
    int z = iNums/y; 
    int x2 = iNums/(y * 10); 
    printf("%d-",z - x2*10); 
} 
20

將其轉換爲字符串,然後迭代字符。對於您可以使用std::ostringstream轉換,如:

int iNums = 12476; 
std::ostringstream os; 

os << iNums; 
std::string digits = os.str(); 

順便說一下一般使用的術語(對於你所說的「數字」)是「數字」 - 請使用它,因爲它使您的文章更加稱號可以理解:-)

+0

我將該數字更改爲數字。 – Ilyssis 2011-01-06 12:57:50

+0

+1:這是用C++解決這類問題的最一般/靈活的方法:學習這一點,你就可以做好很多其他的小任務了。一旦你有'數字',你可以遍歷字符串打印每個數字,只要你喜歡。 – 2011-01-06 13:43:38

+0

它可以打印,但我需要數字作爲int來處理它們。 – Ilyssis 2011-01-06 14:03:33

4

我不測試它只是寫在我腦海中。藉口任何語法錯誤

這裏是online ideone demo

vector <int> v; 

int i = .... 
while(i != 0){ 
    cout << i%10 << " - "; // reverse order 
    v.push_back(i%10); 
    i = i/10; 
} 

cout << endl; 

for(int i=v.size()-1; i>=0; i--){ 
    cout << v[i] << " - "; // linear 
} 
28
void print_each_digit(int x) 
{ 
    if(x >= 10) 
     print_each_digit(x/10); 

    int digit = x % 10; 

    std::cout << digit << '\n'; 
} 
8

這裏是產生一個數字矢量一個更通用的儘管遞歸解決方案:作爲在

void collect_digits(std::vector<int>& digits, unsigned long num) { 
    if (num > 9) { 
     collect_digits(digits, num/10); 
    } 
    digits.push_back(num % 10); 
} 

有是一個相對較少的數字,遞歸是整齊有界的。

0

從D.Shawley的回答繪製,可以走得更遠一點完全由outputing結果回答:

void stream_digits(std::ostream& output, int num, const std::string& delimiter = "") 
{ 
    if (num) { 
     stream_digits(output, num/10, delimiter); 
     output << static_cast<char>('0' + (num % 10)) << delimiter; 
    } 
} 

void splitDigits() 
{ 
    int num = 12476;  
    stream_digits(std::cout, num, "-");  
    std::cout << std::endl; 
} 
0

我不知道這是快或慢或不值錢,但是這將是一個替代方案:

int iNums = 12476; 
string numString; 
stringstream ss; 
ss << iNums; 
numString = ss.str(); 
for (int i = 0; i < numString.length(); i++) { 
    int myInt = static_cast<int>(numString[i] - '0'); // '0' = 48 
    printf("%i-", myInt); 
} 

我指出這一點是iNums暗示可能是用戶輸入,如果用戶輸入是擺在首位的字符串,你不需要去通過INT轉換爲的麻煩串。

(to_string可以在C++使用11)

-1

我知道這是一個古老的職位,但所有這些答案都是不能接受我,所以我寫了我自己!

我的目的是將數字渲染到屏幕上,因此是函數名稱。

void RenderNumber(int to_print) 
{ 
    if (to_print < 0) 
    { 
     RenderMinusSign() 
     RenderNumber(-to_print); 
    } 
    else 
    { 
     int digits = 1; // Assume if 0 is entered we want to print 0 (i.e. minimum of 1 digit) 
     int max = 10; 

     while (to_print >= max) // find how many digits the number is 
     { 
      max *= 10; 
      digits ++; 
     } 

     for (int i = 0; i < digits; i++) // loop through each digit 
     { 
      max /= 10; 
      int num = to_print/max; // isolate first digit 
      to_print -= num * max; // subtract first digit from number 
      RenderDigit(num); 
     } 
    } 
} 
1

你可以利用這個功能做到這一點:根據@ Abyx的回答

void printDigits(int number) { 
    if (number < 0) { // Handling negative number 
     printf('-'); 
     number *= -1; 
    } 
    if (number == 0) { // Handling zero 
     printf('0'); 
    } 
    while (number > 0) { // Printing the number 
     printf("%d-", number % 10); 
     number /= 10; 
    } 
} 
0

,但使用div這樣只有1師每位完成。

#include <cstdlib> 
#include <iostream> 

void print_each_digit(int x) 
{ 
    div_t q = div(x, 10); 

    if (q.quot) 
     print_each_digit(q.quot); 

    std::cout << q.rem << '-'; 
} 

int main() 
{ 
    print_each_digit(12476); 
    std::cout << std::endl; 
    return 0; 
} 

輸出:

1-2-4-7-6- 

N.B.僅適用於非負數整數。

0

爲了得到在 「POS」 位置位(起始於位置1爲最低有效位(LSD)):

digit = (int)(number/pow(10,(pos-1))) % 10; 

示例:號碼= 57820 - > POS = 4 - >位= 7


順序地獲取數字:

int num_digits = floor(log10(abs(number?number:1)) + 1); 
for(; num_digits; num_digits--, number/=10) { 
    std::cout << number % 10 << " "; 
} 

示例:號碼= 57820 - >輸出:0 2 8 7 5

0

我的解決辦法:

void getSumDigits(int n) { 
    std::vector<int> int_to_vec; 
    while(n>0) 
    { 
     int_to_vec.push_back(n%10); 
     n=n/10; 
    } 

    int sum; 

    for(int i=0;i<int_to_vec.size();i++) 
    { 
     sum+=int_to_vec.at(i); 

    } 
    std::cout << sum << ' '; 
} 
0

我使用答案是這樣的簡單函數:

int getDigit(int n, int position) { 

    return (n%(int)pow(10, position) - (n % (int)pow(10, position-1)))/(int)pow(10, position-1); 

} 

希望有人認爲這有幫助!