面向信息时代的计算机数学:CINTA作业一

面向信息时代的计算机数学

CINTA作业一

  1. 用 C 语言编程实现判断输入为偶数的函数,即如果输入为偶数,返回 T rue,否则 返回 Fal
bool pan(int x) {
	if (x % 2 == 0)
		return True;
	return False;
}
  1. 给定一个整数 v,如何判断 v 是否 2 的某次方?比如,v = 4 = 22,返回 T rue; v = 9 = 23 + 1 并非 2 的次方,返回 False。请写一个 C 语言的函数来实现以上功能。
bool jud(int x) {
	if (x == 0)
		return 0;
	while ((x - ((x >> 1) << 1)) == 0) {
		x = x >> 1;
	}//先把二进制低位的0去掉
	x = x >> 1;
	if (x != 0)
		return false;
	else
		return true;
    //再把一位1去掉,如果还有1就不是2的某次方
}

后来在leetcode(231. Power of Two)上交的AC代码是这样子的

class Solution {
public:
    bool isPowerOfTwo(int n) {
        if (n <= 0)//2的多少次方也不可能是负数,加个判定
		return 0;
	while ((n ^ ((n >> 1) << 1)) == 0) {//把减法换成异或超越百分之一百的人
		n =n >> 1;
	}
	n = n >> 1;
	if (n != 0)
		return false;
	else
		return true;
    }
};
  1. 用 C 语言编程实现一种迭代版本的简单乘法。
#include <iostream>
using namespace std;

int mul(int a, int b) {
	if (b < 0) {
		a = -a;
		b = -b;
	}
	if (b == 0)
		return 0;
	int sum = 0;
	while (b != 1) {
		if (b % 2) {
			sum += a;
			a = a << 1;
		} else {
			a = a << 1;
		}
		b /= 2;
	}
	return sum + a;
}

int main() {
	int a, b, sum = 0;
	cin >> a >> b;
	cout << mul(a, b);
	return 0;
}
  1. 证明命题1.1。

命题 1.1. 整除性 ♠ 设 a, b, c ∈ Z,如果 a | b,b | c,则 a | c。如果 c | a,c | b,则对任意 m, n ∈ Z,有 c | (ma + nb)。

证明:由如果 a | b,b | c,则 a | c可知

因为对任意m, n ∈ Z,a | ma ,b | nb,又因为c | a,c | b,所以c | ma,c | nb

又因为分配律,所以c | (ma+nb)

  1. 证明任意形如 111 ⋅ ⋅ ⋅ 111 ∣ z n 111 · · · 111 | {z } n 111⋅⋅⋅111∣zn 的整数都不是平方数,n > 2。

证明:从列一个平方乘法的竖式开始,例如yx_*yx_

要想结果个位为1,横线处只能填1或9

要是填9的话,十位的结果是x*9+x*9+8,则十位一定不能是1

要是填1的话,十位的结果是x*1+x*1,则十位一定不能是1

因为十位都没有可能是1所以一定没有一个由n个1组成的整数是平方数

*群里补加题(leetcode 371. Sum of Two Integers)

int getSum(int a, int b) {
	while (b != 0) {
		int c = a;
		a = a ^ b;
		b = (unsigned int)(c & b) << 1;
		//不加unsigned int的话leetcode 上会有最高符号位的报错
	}
	return a;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值