识别给定数字中的数字。

发布于 2024-07-24 07:07:30 字数 118 浏览 11 评论 0原文

我是编程新手,我遇到了一个问题。 我希望我的程序能够识别给定数字中的各个数字,例如如果我输入 4692,它应该识别这些数字并打印 4 6 9 2。 是的,不使用数组。

I'm new to programming, and I'm stuck at a problem. I want my program to identify the separate digits in a given number, like if I input 4692, it should identify the digits and print 4 6 9 2. And yeah, without using arrays.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

时光磨忆 2024-07-31 07:07:30

如果您是编程新手,那么这是一个需要解决的完美递归问题...

4692/1000 = 4

4692%1000 = 692

692/100 = 6

692%100 = 92

92/10 = 9

92%10 = 2

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

A perfect recursion problem to tackle if you're new to programming...

4692/1000 = 4

4692%1000 = 692

692/100 = 6

692%100 = 92

92/10 = 9

92%10 = 2

You should get the idea for the loop you should use now, so that it works for any number. :)

谜兔 2024-07-31 07:07:30

已经好几年没写过 C 代码了,但这应该可以。

int i = 12345;

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

Haven't written C code in year, but this should work.

int i = 12345;

while( i > 0 ){
   int nextVal = i % 10;
   printf( "%d", nextVal );
   i = i / 10;
}
仅此而已 2024-07-31 07:07:30

简单又好看

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

Simple and nice

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;
    }
}
心是晴朗的。 2024-07-31 07:07:30

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

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

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

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

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

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

Another approach is to have two loops.

1) First loop: Reverse the number.

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

2) Second loop: Print the numbers from right to left.

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

This is assuming you want the digits printed from right to left. I noticed there are several solutions here that do not have this assumption. If not, then just the second loop would suffice.

甚是思念 2024-07-31 07:07:30

我认为这个想法是打印不重复的数字(否则就太简单了)......好吧,您可以跟踪已经打印的整数,而无需用数组将它们编码为另一个整数。

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

int encoding = 0;
int d;

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

I think the idea is to have non reapeating digits printed (otherwise it would be too simple)... well, you can keep track of the already printed integers without having an array encoding them in another integer.

some pseudo C, to give you a clue:

int encoding = 0;
int d;

while (keep_looking()) {
  d = get_digit();
  if (encoding/(2**d)%2 == 0) {
    print(d);
    encoding += 2**d;
  }
}
黑凤梨 2024-07-31 07:07:30

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

#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;
}

Here is a simple solution if you want to just print the digits from the number.

#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;
}
居里长安 2024-07-31 07:07:30

这是对的吗

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

Is it correct

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文