原题链接:238. 除自身以外数组的乘积 - 力扣(LeetCode) (leetcode-cn.com)
这是LeetCode上的一道题,在此处我实现了它的功能,但是最后一步把所求出的数字存进一个数组没写出来,可以创建一个存储len个元素的数组,然后每求出一个ret就存进数组中去,记得设置循环变量哦!
先上代码:
void get_result(int* arr, int len)
{
int i = 0;
for (i = 0; i < len; i++)
{
int ret = 0;
int leftNum = 1;
int rightNum = 1;
int j = 0;
int k = 0;
for (j = 0; j < i; j++)
{
leftNum *= arr[j];
}
for (k = i + 1; k < len; k++)
{
rightNum *= arr[k];
}
ret = leftNum * rightNum;
printf("%d ", ret);
}
}
int main()
{
int arr[100000] = { 0 };
int num = 0;
int i = 0;
int count = 0;
scanf("%d", &num);
while (num != 31)
{
count++;
arr[i] = num;
i++;
scanf("%d", &num);
}
get_result(arr, count);
return 0;
}
写的过程都是基于原题条件:
在此处,首先我们创建一个可以存放10的五次方个元素的数组,然后我们开始向数组中录入数字,范围是-31到31,所以我们设置一个终止条件,当不想输的时候,就输入31作为终止条件。
而count变量是用来统计这次输入你一共录入了几个数字,用一个get_result函数来解决问题,我所做的是打印,所以不需要返回值,传进去的是数组和你输入的数字的个数。
我的思路是将arr[i]元素左边所有元素的乘积算出来,再把arr[i]元素右边所有元素的乘积算出来,最终的结果就是两者的乘积。
在函数get_result中,我们首先要遍历数组,然后用leftNum变量来记录arr[i]元素左边所有元素的乘积,用rightNum变量来记录arr[i]元素右边所有元素的乘积,用ret变量来表示最后的总乘积,再打印出来。这是一次的过程,一共有len个元素,所以有len次,也可以把这个值存进一个数组。
|