[简单题]自定义取余(三种解法)C++实现

题目链接:

点击打开原题链接

题目意思,就是标题意思。

第一种解法:(加法迭代)用加法来模拟这个(17行代码)

int mod256WithoutMod(int number)
{
	if (number == 0) 
		return 0;
	bool flag = false;
	if (number < 0) {
		number = - number; 
		flag = true;
	}
	int temp;
	for (temp = 256;temp <= number;temp += 256);
	if (flag) {
		return (temp - 256) - number;
	}else {
		return number - (temp - 256);
	}
}

很显然,既然是用加法反反复复地模拟,那么肯定也是可以用乘法的,于是有了第二种

第二种解法:(用int 与 int 之间的除法是整除,来做这个取余的操作)(行数就不说了)

int mod256WithoutMod(int number){
	return number - (number/256)*256;
} 

第三种解法,虽然不够第二种巧,但是确实很值得拿来学习(此解法来自于codeWars)

#include 
int mod256WithoutMod(const int number)
{
  return std::div(number, 256).rem;
}

测试过将std::去掉是没有问题的。从英语的字面意思来看,div是除法的意思,rem是remain留下来的意思,也就是做了除法之后,留下来的那个东西。(自然就是余数了)

怎么看都感觉返回的是一个类,最近打了些Python,觉得这个格外亲切emmm,为了测试我做了一些小实验:

#include 
#include 
int mod256WithoutMod(const int number)
{
	std::cout << typeid(div(number, 256)).name()<<"\n";
	return std::div(number, 256).rem;
}


为了满足自己的好奇心,我就试了下,感觉还不错。

除了一般的返回值以外,多了一个这个:

6_div_t

这样的一个字样(那个6应该是取决不同的机型,或者是输入的类型)

但无所谓,我们大概是能看出来,这是一个div_t的类型的东西。好奇宝宝再次上线。我去查了下这东西。

别的不知道,但菜鸟教程的这个写的还行(不是打广告!!!)

附上我找到的链接:

http://www.runoob.com/cprogramming/c-function-div.html

div_t是一个结构体。

它有两个成员 

int quot;

int rem;

分别表示的是商和余数

中,div的定义是:

div_t div(int number,int demo);

number 是分子,demo 是分母;

上面的那个结构体div_t 是返回值


你可能感兴趣的:(简单题,C++)