我需要找到一个数字序列的总和,+和 - ,同时只使用递归(不允许使用循环)。
我只能更改函数,仅此更改,包括函数中的指针(并且不能向其添加任何其他内容)。 我也不允许使用除stdio.h之外的任何其他库。
#include <stdio.h>
#define MAX_LENGTH 100
int calc_sum_string(char *s);
int main() {
char s[MAX_LENGTH];
scanf("%s", s);
printf("%d", calc_sum_string(s));
return 0;
}
int calc_sum_string(char *s) {
int sum = s[MAX_LENGTH];
if (*s == '\0'){
return sum;
}
if (*s == '+'){
sum = calc_sum_string(s-1)+ calc_sum_string(s+1);
}
if (*s == '-'){
sum = calc_sum_string(s+1) - calc_sum_string(s-1);
return sum;
}
输入:7-8+9
输出:8
答案 0 :(得分:0)
#include <stdio.h>
#define MAX_LENGTH 100
//Stringification
#define S_(n) #n
#define S(n) S_(n)
int calc_sum_string(char *s);
int main(void){
char s[MAX_LENGTH+1];
scanf("%" S(MAX_LENGTH) "s", s);
printf("%d", calc_sum_string(s));
return 0;
}
int calc_sum_string(char *s){
//It is assumed that there is no space character in the character string.
//The string is not changed within this function.
int n, len;
if (*s == '\0' || 1 != sscanf(s, "%d%n", &n, &len)){
return 0;
}
return n + calc_sum_string(s + len);
}
答案 1 :(得分:0)
您目前的代码有几个问题。您需要首先解决的问题包括:
修复这些项目。如果您仍然遇到问题,请给我们正确发布您剩余的问题,我们将帮助您克服困难。
答案 2 :(得分:0)
#include <stdio.h>
#define MAX_LENGTH 100
int calc_sum_string(char *s);
int main()
{
char s[MAX_LENGTH];
scanf("%s", s);
printf("%d", calc_sum_string(s));
return 0;
}
int calc_sum_string(char *s)
{
if(*s == '\0')
return 0;
if (*s == '+'){
return *(s+1) + calc_sum_string(s+2) - '0';
}
else if (*s == '-'){
return -(*(s + 1) - '0') + calc_sum_string(s+2);
}
else {
return *s - '0' + calc_sum_string(s+1);