如何用c中的开关翻转我的声明?

时间:2013-11-13 02:58:42

标签: c++ c switch-statement

现在我的代码将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;
}

7 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

我不是c程序员,但是如果你不能从右到左遍历数字,那么

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))

这将使你从左到右而不是从右到左(虽然添加一些变量可能会提高计算效率。

答案 3 :(得分: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;
}

答案 4 :(得分: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
}

答案 5 :(得分: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;
}

答案 6 :(得分:0)

在将号码发送到交换机之前,请将号码反转。