识别给定数字中的数字。

时间:2009-06-11 13:43:36

标签: c++ c numbers digits

我是编程新手,我遇到了问题。我希望我的程序识别给定数字中的单独数字,就像我输入4692一样,它应该识别数字并打印4 6 9 2。是的,不使用数组。

7 个答案:

答案 0 :(得分:26)

如果您不熟悉编程,则需要解决一个完美的递归问题...

4692/1000 = 4

4692%1000 = 692

692/100 = 6

692%100 = 92

92/10 = 9

92%10 = 2

你应该了解你现在应该使用的循环,以便它适用于任何数字。 :)

答案 1 :(得分:1)

年内没有编写C代码,但这应该可行。

int i = 12345;

while( i > 0 ){
   int nextVal = i % 10;
   printf( "%d", nextVal );
   i = i / 10;
}

答案 2 :(得分:1)

简单又好看

void PrintDigits(const long n)
{
    int m = -1;
    int i = 1;

    while(true)
    {
        m = (n%(10*i))/i;
        i*= 10;
        cout << m << endl;

        if (0 == n/i)
            break;
    }
}

答案 3 :(得分:0)

如果您只想打印数字中的数字,这是一个简单的解决方案。

#include <stdio.h>
/**
printdigits
*/
void printDigits(int num) {

   char buff[128] = "";
   sprintf(buff, "%d ", num);
   int i = 0;
   while (buff[i] != '\0') {
      printf("%c ", buff[i]);
      i++;
   }
   printf("\n");
}
/*
main function
*/
int main(int argc, char** argv) {
   int digits = 4321;
   printDigits(digits);
   return 0;
}

答案 4 :(得分:0)

我认为这个想法是打印非重新打印的数字(否则会太简单)......好吧,你可以跟踪已打印的整数,而不需要用另一个整数编码它们的数组。

一些伪C,给你一个线索:

int encoding = 0;
int d;

while (keep_looking()) {
  d = get_digit();
  if (encoding/(2**d)%2 == 0) {
    print(d);
    encoding += 2**d;
  }
}

答案 5 :(得分:0)

另一种方法是有两个循环。

1)第一个循环:反转数字。

int j = 0;
while( i ) {
   j *= 10;
   j += i % 10;
   i /= 10;
}

2)第二个循环:从右到左打印数字。

while( j ) {
   std::cout << j % 10 << ' ';
   j /= 10;
}

这是假设您要从右到左打印数字。我注意到这里有几种没有这种假设的解决方案。如果没有,那么仅第二个循环就足够了。

答案 6 :(得分:-1)

是否正确

int main()        
{
    int number;
    cin>>number;
    int nod=0;
    int same=number;

    while(same){
        same/=10;
        nod++;
    }

    while(nod--){               
        cout<<(int)number/(int)pow10(nod)%10<<"\t";       
    }
    return 0;
}