0

现在我的代码将 37 写成 7 3。我怎么能把它换成三七?除了那个开关之外,我目前还需要完成这项工作所需的所有其他东西。请帮忙!

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

7 回答 7

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;
}
于 2013-11-13T05:14:59.243 回答
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;
}
于 2013-11-13T03:17:06.487 回答
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))

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

于 2013-11-13T03:03:10.920 回答
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;
}
于 2013-11-13T03:36:23.767 回答
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
}
于 2013-11-13T03:36:54.140 回答
0

不知道整数数学是否是该过程的必需部分,但如果不是,您可以通过执行基于字符的循环更轻松地获得所需的内容:

#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;
}
于 2013-11-13T03:46:42.600 回答
0

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

于 2013-11-13T05:32:00.010 回答