几个看似复杂实则简单的笔试题

题目一

计算1到n的累加和
题目描述:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

*竟然不能用乘除法和循环以及条件判断语句,乍一看这也太变态了吧。还好可以用加法!用递归来代替循环,然后从n+n-1开始,一直加到n=0结束。那么问题是,如何判断n!=0呢? 这里便用到一个基本的运算符 “&&” ,与运算符在运行时,只有两边都为真,结果才为真,那么只要前面条件为假,后面的运算将不再进行。伪代码表示:
if n!=0
sum+=f(n-1)
*

Java代码实现如下:

 public static int f(int n) {
	int sum = n;
	boolean t = (n != 0) && (sum = sum + f(n - 1)) != 0;
	return sum;
    }
  • 这个 && 逻辑判断符的作用就是:如果 n != 0 成立的话,那么逻辑判断符后面的判断语句 (f(n-1) + n ) != 0 也会执行, 如果 n!= 0 不成立的话,那么后面的判断语句 ((f(n-1) + n)) != 0 就不会执行,通过这种方法,就可以达到我们递归结束条件判断的目的了。

  • 这里说明一下,(f(n-1) + n) != 0 这条判断语句是没有任意其他含义的,我们的目的是为了执行 f(n-1)+n,之所以加上个 != 0 的判断,是因为逻辑 判断符号 && 只支持 boolean 类型,不支持 int 类型。

题目二

两个数相乘
题目描述:实现两个整数的相乘,不能使用乘法运算符和循环

这个题可能就比较简单了,不能使用乘法和循环,但我们可以使用除法呀,
A
B=A/(1/B)*
Java代码实现如下:

 public static int mult(int a, int b) {
	return b != 0 ? (int) (a / (1.0 / b) + 0.99) : 0;
    }
  • 一行代码搞定,如果b!=0 那么就让a乘1/b,反之结果为0。
    但是这里有个问题,1/b数据类型为double,而两个整数相乘结果必然为整数,这里需要int进行转化类型,但是除法可能会导致后面尾数的丢失,所以我补了个0.99。注意,进行 int 类型转化时,小于 1 就行当做0处理。0.99又会被舍去。不影响最终结果。

题目三

求两数之和
题目描述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

方法一:

  • 在绞尽脑汁之后,想到了数电曾学过的异或运算。如果我们把两个数进行异或,例如num1 = 101, num2 = 001,做异或运算:tmp = num1 ^ num2,结果是 tmp =100。那么此时得到的结果 tmp 其实就是两个数(num1,num2)各个二进制位上相加,不算进位的结果。而 num1 = (num1 & num2)<<1的结果就是两个数相加时那些需要进位的二进制位。例如 (101 & 001)<< 1=010,那么两个数第一位相加需要进位,我们需要把进的 那一位最后加到第二位上去。 说白就是 a + b = a ^ b + (a & b) << 1。 代码中,如果 num1 == 0的话,代表没有进位了,此时就可以退出循环了。
    Java代码实现如下:
 public static int Add(int num1, int num2) {
	int tmp = 0;
	while (num1 != 0) {
	    tmp = num1 ^ num2;
	    num1 = (num1 & num2) << 1;
	    num2 = tmp;
	}
	return num2;

方法二:

  • java方法库中有一个BigInteger的方法,它可以表示任意大的数,而这个方法的四则运算也都是用函数来进行,不会涉及四则运算符号,也算是投机取巧了一次。

Java代码实现如下:

public static int Add(int num1, int num2) {
		BigInteger b1 = new BigInteger(String.valueOf(num1));
		BigInteger b2 = new BigInteger(String.valueOf(num2));
		return b1.add(b2).intValue();
	}

未完待续…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值