我想知道您是否可以提供帮助,我正在尝试将一些用 javascript 编写的代码“转换”为“C”代码,但我不确定如何处理该对象:
function updateObj(o, k) {
return {
n: o.n + 1,
way: k + "-" + o.way
}
}
function steps(k) {
if (k == 1) {
return {
n: 2,
way: "1-0<BR>"
};
}
let case1 = updateObj(steps(k - 1),k);
for (i = 2; k % i > 0; i++);
if (k == i) {
return case1;
}
let case2 = updateObj(steps(k / i),k);
if (case1.n < case2.n) return case1
else return case2;
}
document.write(steps(291).way);
您如何将其转移到“C”? 这是我的尝试:
#include <stdio.h>
#include <conio.h>
#define MIN(x, y) (((x) < (y)) ? (x) : (y))
int steps(int num);
int main() {
int res;
res = steps(150);
_getch();
return 0;
}
int steps(k)
{
int i = 0;
if (k == 1) return 1;
for (int i = 2; k%i > 0; i++);
if (k == i) {
return steps(k - 1);
}
return 1 + MIN(steps(k - 1), steps(k / i));
}
最佳答案
javascript 到“C”代码的紧密映射示例。
// Include needed headers.
#include <stdio.h>
#include <stdlib.h>
// Form a struct
typedef struct {
int n;
char *way; // Code will need to manage the strings - oh the joy of C!
} function;
function updateObj(function o, int k) {
// Body left for OP to implement
// Determine concatenation memory needs
// Allocate
// Concatenate
// Free `o` resources
// Form `function`
}
function steps(int k) {
if (k == 1) {
// v---Compound Literal -----------------------v Since C99
return (function) {.n = 2, .way = strdup("1-0<BR>")};
}
function case1 = updateObj(steps(k - 1), k);
int i;
for (i = 2; k % i > 0; i++) {
;
}
if (k == i) {
return case1;
}
function case2 = updateObj(steps(k / i), k);
if (case1.n < case2.n) {
function_free(case2); // need to free resources in case2
return case1;
} else {
function_free(case1); // need to free resources in case1
return case2;
}
}
int main() {
function f = steps(291);
puts(f.way);
function_free(f);
}
关于c - 在 C 中表示对象或处理多值返回的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53500595/