每個數字我有一個整數:C++獲得INT
int iNums = 12476;
現在我想從iNums爲整數時,每個數字。例如:
foreach(iNum in iNums){
printf("%i-", iNum);
}
所以輸出結果是:「1-2-4-7-6-」。 但我實際上需要每個數字作爲int而不是char。
感謝您的幫助。
每個數字我有一個整數:C++獲得INT
int iNums = 12476;
現在我想從iNums爲整數時,每個數字。例如:
foreach(iNum in iNums){
printf("%i-", iNum);
}
所以輸出結果是:「1-2-4-7-6-」。 但我實際上需要每個數字作爲int而不是char。
感謝您的幫助。
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);
}
將其轉換爲字符串,然後迭代字符。對於您可以使用std::ostringstream
轉換,如:
int iNums = 12476;
std::ostringstream os;
os << iNums;
std::string digits = os.str();
順便說一下一般使用的術語(對於你所說的「數字」)是「數字」 - 請使用它,因爲它使您的文章更加稱號可以理解:-)
我不測試它只是寫在我腦海中。藉口任何語法錯誤
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
}
void print_each_digit(int x)
{
if(x >= 10)
print_each_digit(x/10);
int digit = x % 10;
std::cout << digit << '\n';
}
這裏是產生一個數字矢量一個更通用的儘管遞歸解決方案:作爲在
void collect_digits(std::vector<int>& digits, unsigned long num) {
if (num > 9) {
collect_digits(digits, num/10);
}
digits.push_back(num % 10);
}
有是一個相對較少的數字,遞歸是整齊有界的。
從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;
}
我不知道這是快或慢或不值錢,但是這將是一個替代方案:
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)
我知道這是一個古老的職位,但所有這些答案都是不能接受我,所以我寫了我自己!
我的目的是將數字渲染到屏幕上,因此是函數名稱。
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);
}
}
}
你可以利用這個功能做到這一點:根據@ 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;
}
}
,但使用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.僅適用於非負數整數。
爲了得到在 「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
我的解決辦法:
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 << ' ';
}
我使用答案是這樣的簡單函數:
int getDigit(int n, int position) {
return (n%(int)pow(10, position) - (n % (int)pow(10, position-1)))/(int)pow(10, position-1);
}
希望有人認爲這有幫助!
我將該數字更改爲數字。 – Ilyssis 2011-01-06 12:57:50
+1:這是用C++解決這類問題的最一般/靈活的方法:學習這一點,你就可以做好很多其他的小任務了。一旦你有'數字',你可以遍歷字符串打印每個數字,只要你喜歡。 – 2011-01-06 13:43:38
它可以打印,但我需要數字作爲int來處理它們。 – Ilyssis 2011-01-06 14:03:33