Как я могу перевернуть мое заявление с моим переключателем в C?

0

прямо сейчас мой код выписывает 37 как семь три. как я могу переключить его, чтобы сказать три семерки? Я получил все другие вещи, которые мне нужно сделать в этот момент, кроме этого переключателя. пожалуйста помоги!

#include <stdio.h>

int main (void)
{

        int x;

        printf("Please enter an integer: ");
        scanf("%d", &x);

        printf("\nYou have entered:\n\n");

        do{

                switch (x%10)

        {
        case 0:
                printf("zero ");
                break;
        case 1:
                printf("one ");
                break;
        case 2:
                printf("two ");
                break;
        case 3:
                printf("three ");
                break;
        case 4:
                printf("four ");
                break;
        case 5:
                printf("five ");
                break;
        case 6:
                printf("six ");
                break;
        case 7:
                printf("seven ");
                break;
        case 8:
                printf("eight ");
                break;
        case 9:
                printf("nine ");
                break;
        };

        x=x/10;
        }while(x>0);

        printf("\n\n");



        return 0;
}
Теги:
switch-statement

7 ответов

1
Лучший ответ

Следующий код работает.

Чтобы обрабатывать 37, вы сначала получаете количество цифр, которое равно 2. Затем вы можете проанализировать это целое число слева направо.

Надеюсь, это полезно для вас!

#include<stdio.h>

int main (void) {

int x;

printf("Please enter an integer: ");
scanf("%d", &x);

printf("\nYou have entered:\n\n");

int len = 1;

for(len = 1; ; len = len * 10){

if(x / len == 0){
    break;
}

}

len = len / 10;


do{

      switch (x/len)

    {
    case 0:
          printf("zero ");
          break;
    case 1:
          printf("one ");
          break;
    case 2:
          printf("two ");
          break;
    case 3:
          printf("three ");
          break;
    case 4:
          printf("four ");
          break;
    case 5:
          printf("five ");
          break;
    case 6:
          printf("six ");
          break;
    case 7:
          printf("seven ");
          break;
    case 8:
          printf("eight ");
          break;
    case 9:
          printf("nine ");
          break;
    };

    x = x % len;
    len = len / 10;

}while(x>0);

printf("\n\n");



return 0;
}
  • 0
    Я попробовал ваше решение здесь, но что я получу, если наберу, скажем, 73 было три три. Я предполагаю, что он читает два числа, но пишет только второе. какой способ обойти это?
  • 0
    также в заявлении, что идет во второй части. я получил я = 1; ; I = I * 10
Показать ещё 3 комментария
3

Вы всегда можете написать рекурсивную функцию для печати, как показано ниже.

#include <stdio.h>

void printnumber(int num)
{
    if (num == 0) return;
    printnumber(num / 10);

    switch (num % 10)
    {
        case 0; printf("zero "); break;
        case 1; printf("one "); break;
        case 2; printf("two "); break;
        case 3; printf("three "); break;
        case 4; printf("four "); break;
        case 5; printf("five "); break;
        case 6; printf("six "); break;
        case 7; printf("seven "); break;
        case 8; printf("eight "); break;
        case 9; printf("nine "); break;
    }

    // uncommment the below line and comment the 
    // printnumber() call above to print the number
    // backwards

    // printnumber(num / 10);
}

int main (void)
{
        int x;

        printf("Please enter an integer: ");
        scanf("%d", &x);

        printf("\nYou have entered:\n\n");

    printnumber(x);

        printf("\n\n");

        return 0;
}
0

Перед отправкой номера на коммутатор измените номер.

0

Dunno, если целочисленная математика является обязательной частью процесса, но если это не так, вы можете получить то, что хотите более легко, выполнив цикл на основе символов:

#include <stdio.h>

int main (void)
{
   char buf[64] = "";
   printf("Please enter an integer: ");
   (void) fgets(buf, sizeof(buf), stdin);

   printf("\nYou have entered:\n\n");
   const char * b = buf;
   while(*b)
   {
      switch(*b)
      {
         case '0':  printf("zero ");  break;
         case '1':  printf("one ");   break;
         case '2':  printf("two ");   break;
         case '3':  printf("three "); break;
         case '4':  printf("four ");  break;
         case '5':  printf("five ");  break;
         case '6':  printf("six ");   break;
         case '7':  printf("seven "); break;
         case '8':  printf("eight "); break;
         case '9':  printf("nine ");  break;
         default:   /* empty */       break;
      }
      b++;
   }
   printf("\n\n");
   return 0;
}
0

Я не программист на компьютере, но если вы не можете пересечь число справа налево,

switch (x - x%10 * 10)

а также

x = floor(x/10);

РЕДАКТИРОВАТЬ: ВЫШЕ ИСКАТЬ В НЕПРАВИЛЬНОМ НАПРАВЛЕНИИ

switch (floor(x/10^floor(log10(x))))

А также

x -= floor(x/10^floor(log10(x))) * 10^floor(log10(x))

Это приведет вас слева направо, а не справа налево (добавив некоторые переменные, которые могут увеличить эффективность вычислений.

  • 0
    Ты ошибаешься. 1234 - 1234% 10 * 10 = 4 (крайняя правая цифра). floor (1234/10) = 123 ... он делает то, что просит плакат, и двигается справа налево.
  • 0
    О, черт, это должно было идти слева направо. DOH! Я переработаю математику и отредактирую.
Показать ещё 1 комментарий
0

У вас есть ограничение памяти? Если нет, рассмотрите временный массив для хранения каждой цифры в номере. Затем вы можете распечатать его в любом направлении.

Псевдокод,

int arr[50];
int count = 0;
while (number != 0)
{
    arr[count++] = number % 10;
    number = number / 10;
}
for (int i=count-1; i>=0; i--)
{
     // print arr[i] in word
}
0

Вот код для отмены вашего номера. Он не статичен, вы можете ввести любое число, которое вы хотите.

#include<iostream>
#include<math.h>
using namespace std;
int getd(int n)
{
    return (int)log10(n);
}
int get(int n,int i,int digit)
{
    int p;
    p=(int)pow(10,i-1);
    n=n/p;
    return n%10;
}
int reverse(int n)
{
    int digit;
    digit=getd(n)+1;
    int a,i,j;
    int sum=0;
    for(i=1,j=digit-1,sum=0 ; i<=digit ; i++,j-- )
    {
        a=get(n,i,digit);
        sum=sum+(a*(int)pow(10,j));
    }
    return sum;
}
int main()
{
    int n;
    cin>>n;
    cout<<reverse(n);
    return 0;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню