首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理数组元素的函数

处理数组元素的函数
EN

Stack Overflow用户
提问于 2018-12-13 05:24:56
回答 4查看 89关注 0票数 0

我需要写一个减去数字的函数。如果用户输入2345,则输出应为111 (5-4,4-3,3-2);另一个示例为683,其中输出应为25 (3-8(取abs值),8-6)。

我已经写了下面的代码,只有在声明了数组的大小时才有效。

代码语言:javascript
复制
int subtraction(int arr[], int size) {
int sub = 0;
for (int i = 0; i < size-1; i++) {
    sub = sub * 10 + abs(arr[i] - arr[i+1]);
}
return sub;
}

但是,用户输入的数字是随机的,可以有不同的数字,所以我不知道应该在for循环中设置什么限制。

例如:

代码语言:javascript
复制
    int arr[] = {1, 2, 55, 56, 65, 135}, i;
    subtraction(arr, 6);
    for (i=0; i<6; i++)
         printf("%d ", arr[i]);

预期输出:0 0 0 1 1 22

这个函数应该是从倒数第二个数字中减去倒数第二个数字,顺便说一句,/从右到左/从用户输入的随机数减去;例如,如果输入的是5789,则输出应该是211 (9-8,8-7,7-5);如果用户输入一个负数,程序应该取它的绝对值,然后进行减法。如果用户输入的是一位数,则结果应为0。

我编写的函数只有在声明了数组的大小时才有效。当大小未声明时,我不知道如何让它工作(我相信指针和malloc是必需的,因为这是我通过谷歌搜索了很长时间才找到的,但不幸的是,我不知道该怎么做)。

请帮帮忙?

EN

回答 4

Stack Overflow用户

发布于 2018-12-13 05:39:50

您实际上并没有更改任何值,这里是您需要查看的代码行。

代码语言:javascript
复制
sub = sub * 10 + abs(arr[i] - arr[i+1]);

在打印数组时,实际上需要再次将计算值存储在数组中。

票数 0
EN

Stack Overflow用户

发布于 2018-12-13 07:49:36

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int subtract(int n)
{
  int factor = 1;
  int total = 0;
  int lastPlace = n%10;
  n /= 10;
  while (n>0)
  {
      total += (factor * abs((n%10) - lastPlace));
      factor *= 10;
      lastPlace = n%10;
      n /= 10;
  } 
  return total;
}

void subtractArray(int* arr, unsigned int size)
{
  for (int i=0; i<size; ++i)
  {
    if (arr[i] < 0)
      arr[i] = abs(arr[i]);
    arr[i] = subtract(arr[i]);
  }
}

int main()
{
  int arr[] = {1, 2, 55, 56, 65, 135};
  int size = sizeof(arr)/ sizeof(arr[0]);
  subtractArray(arr, size);
  for (int i=0; i<size; ++i)
  {
    printf("%d ", arr[i]);
  }
  return 0;
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-13 08:30:00

下面是一个简单的代码,可以解决您的问题:)

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int *subtraction(int arr[], int size) 
{
    int *sub = calloc(sizeof(int*) , size), i = 0, rev;              //allocating memory 
    for (i = 0; i < size; i++)
    {    
        rev = 0;
        arr[i] = abs(arr[i]);

        for (int a = 0; arr[i] != 0; arr[i] /= 10)
            rev = (rev * 10) + (arr[i] % 10);

        for (i; (rev / 10) != 0; rev /= 10)             //the loop ends when rev = 0
            sub[i] = ((sub[i] * 10) + abs( (rev % 10) - ((rev / 10) % 10) ));    //easy math => for example rev = 21 > sub[i] = (0 * 10) + ( (21 % 10) - ((21 / 10) %10)) = abs(1 - 2) = 1;
    }
    return sub;
}


int main()
{
    int arr[] = {-9533, 7, -19173}, i;
    int len = sizeof(arr)/sizeof(arr[0]);  //size of arr
    int *sub = subtraction(arr, len);

    for(int i = 0; i < len; i++)   //for test
        printf("%d ", sub[i]);

    return 0;
}

{1,2,55,56,65,135}的输出:

代码语言:javascript
复制
0 0 0 1 1 22

{987654321,123456789,111111111}的输出:

代码语言:javascript
复制
11111111 11111111 0

{38279}的输出:

代码语言:javascript
复制
5652

{-9533,7,-19173}的输出:

代码语言:javascript
复制
420 0 8864
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53751593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档