求1+2+3+...+n,要求不能使用乘法,除法,for,while,if,switch,case等关键字以及条件判断语句

方法:由于不能采用题目中设计到的方法,因此我们采用递归思想进行运算。
其中最后一步设计到了 Java中的“短路”问题,若有朋友不懂啥是“短路”,请进我的博客查看,我专门有一篇是细讲“短路”原理的。


package com.swpu.lijun;

/**
 * 
 * @author Swpu 求1+2+3+...+n,要求不能使用乘法,除法,for,while,if,switch,case等关键字以及条件判断语句。
 */
public class Niuke002 {
	public static void main(String[] args) {
		System.out.println(add(100));
	}

	public static int add(int n) {
		int sum = n;
		boolean flag = (n > 0) && ((sum += add(n - 1)) > 0);//通过短路实现终止递归
		return sum;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算符优先法是一种用于将中缀表达式转换为后缀表达式并值的算法。根据该算法,乘法除法的优先级高于加法和减法,因此在转换为后缀表达式时需要先将乘法除法的操作符放在前面。对于给定的表达式4+2*3-10/5,其对应的后缀表达式为4 2 3 * + 10 5 / -。 以下是用c语言实现算符优先法解给定表达式的代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_SIZE 100 // 定义操作符优先级 int priority(char op) { switch(op) { case '+': case '-': return 1; case '*': case '/': return 2; default: return 0; } } // 定义后缀表达式值函数 int evalPostfix(char *postfix) { int stack[MAX_SIZE]; int top = -1; int i, a, b, c; for(i = 0; i < strlen(postfix); i++) { if(postfix[i] >= '0' && postfix[i] <= '9') { stack[++top] = postfix[i] - '0'; } else { b = stack[top--]; a = stack[top--]; switch(postfix[i]) { case '+': c = a + b; break; case '-': c = a - b; break; case '*': c = a * b; break; case '/': c = a / b; break; } stack[++top] = c; } } return stack[top]; } // 定义中缀表达式转后缀表达式函数 void infixToPostfix(char *infix, char *postfix) { char stack[MAX_SIZE]; int top = -1; int i, j; for(i = 0, j = 0; i < strlen(infix); i++) { if(infix[i] >= '0' && infix[i] <= '9') { postfix[j++] = infix[i]; } else if(infix[i] == '(') { stack[++top] = infix[i]; } else if(infix[i] == ')') { while(stack[top] != '(') { postfix[j++] = stack[top--]; } top--; } else { while(top != -1 && priority(stack[top]) >= priority(infix[i])) { postfix[j++] = stack[top--]; } stack[++top] = infix[i]; } } while(top != -1) { postfix[j++] = stack[top--]; } postfix[j] = '\0'; } int main() { char infix[MAX_SIZE] = "4+2*3-10/5"; char postfix[MAX_SIZE]; infixToPostfix(infix, postfix); printf("infix: %s\n", infix); printf("postfix: %s\n", postfix); printf("result: %d", evalPostfix(postfix)); return 0; } ``` 运行结果为: ``` infix: 4+2*3-10/5 postfix: 423*+105/- result: 8 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值