反转一组数字

时间:2013-09-02 08:06:41

标签: c

如何在C编程中从左到右反转整数数组?

#include <math.h>
#include <stdio.h>

int main() {
    int k[4] = {1,2,3,4};
    N=4;

    for(k=1; k<=N; k=k+1);
        printf("%d",flip(k));
}

实施例: k = [1,2,3,4]翻转应该给k = [4,3,2,1] k是一个数字数组

7 个答案:

答案 0 :(得分:2)

N声明为int(而不需要k)。在循环中将余数打印10,每次递减N = N/ 10,请尝试以下代码:

for(; N; N = N/10) 
       printf(" %d", N % 10);

循环运行直到N!= 0.

它不会反转数字,而只是反向打印。

答案 1 :(得分:2)

为什么不只是谷歌这么简单的问题......!

#include <stdio.h>

int main()
{
   int n, reverse = 0;

   printf("Enter a number to reverse\n");
   scanf("%d",&n);

   while (n != 0)
   {
      reverse = reverse * 10;
      reverse = reverse + n % 10;
      n = n / 10;
   }

   printf("Reverse of entered number is = %d\n", reverse);     
   return 0;
}

输出:

root@jeegar:~# gcc test.c
root@jeegar:~# ./a.out 
Enter a number to reverse
1234
Reverse of entered number is = 4321

答案 2 :(得分:2)

你问的代码:

#include <stdio.h>

int main() {
    int k = 0;
    int n = 1234;

    while (n != 0)
    {
        k *= 10;
        k += n % 10;
        n /= 10;
    }

    printf("%d", k);

    return 0;
}

从这里可以很容易地将其更改为一个功能。请注意,对于“接近”int的最大值的数字,它将无法正常工作。

代码的意思:http://ideone.com/IIK0cc

答案 3 :(得分:2)

修改即可。刚刚看到你的修订版说明问题是要反转一个int数组,而不只是一个数字。好吧,伙计。这更容易。由于这是C,你应该使用指针。其他任何东西都不是C.: - )

#include <stdio.h>

void reverse (int ary[], int size);

int main (void) {
    int ary[] = { 1, 2, 3, 4 };
    int size = sizeof (ary) / sizeof (ary[0]);

    reverse (ary, size);

    for (int i = 0; i < size; i++)
        printf ("%d ", ary[i]);

    printf ("\n");
    return 0;
}


void reverse (int ary[], int size) {
    int* startPtr;
    int* endPtr;
    int temp;

    startPtr = ary;
    endPtr = ary + size - 1;

    while (endPtr > startPtr) {
        temp = *startPtr;
        *startPtr = *endPtr;
        *endPtr = temp;
        startPtr++;
        endPtr--;
    }
    return;
}

输出:

4 3 2 1

答案 4 :(得分:1)

首先,你的问题是模糊和矛盾的。例如,k是一个整数,正如您在问题中包含的代码所示,或者k是一个整数数组,正如您对“向量”所说的那样?此外,您想要反转整数还是要反转数组?这是两个非常不同的问题。为了将来参考,如果你想得到一个好的答案,你应该提出一个好问题;并且显示你的一些工作也不会受到伤害。

无论如何,除了dia骂,这里是反转数组的代码。没有错误检查,所以如果你用错误的方式调用它...好吧,你是独自一人:

void flip(int *array,  // the array to reverse
          int count)   // the number of elements in the array
{
    int i = 0, tmp;

    while(i != count / 2)
    {
        tmp = array[i];    
        array[i] = array[count - i - 1];
        array[count - i - 1] = tmp;

        i++;
    }
}

有关如何使用此功能的示例,请查看this sample program I rigged up

答案 5 :(得分:0)

试试这个:

int flip(int k) { 
  int new = 0;

  while (k > 0) { 
    // Take the last digit and add it to the front of new   
    new = (new * 10) + k % 10;

    // Divide by ten to drop the last digit of k
    k = k / 10;
  }

  return new;
}

答案 6 :(得分:0)

看起来你正试图反转数组,而不是数字

在这种情况下,假设source是您当前的数组,SIZE是一个常量,其大小为source,而destination是您的目标数组,你可以用这个:

for (is = SIZE - 1, id = 0; is >= 0; is--, id++) {
    destination[id] = source[is];
}

Working demo

如果您要替换source的内容......

如果您要替换source而不是反向重复,请执行此操作,然后将destination分配给source

for (counter = 0; counter < SIZE; counter++) {
    destination[counter] = source[counter];
}