仅使用整数实施POW(X,n)%D.(不利用库功能)
Implement pow(x,n)%d with integers only. (without making use of library functions)
基本上我在指数均匀时使用经典鸿沟和征服。
int mymod(int a,int b){ //returns only positive value between 0 to b-1
return a%b<0 ? (a%b)+b : a%b;
}
int Solution::pow(int x, int n, int d) {
if(n==0) return mymod(1,d);
int result = 1;
while(n>0){
if(n%2 == 1)
result = mymod((result * x),d);
n = n>>1; //dividing exponent by 2, if it's even. Divide and conquer whenever exponent is even
x = mymod(x*x,d);
}
return result;
}
现在,我正在使用myMod函数来计算模量,'cuz普通模量给了我-VE结果,这与测试用例不符。我需要用整数实施它。这里有一件主要的事情要注意。溢出情况。某些测试用例的X足够大,当成倍增加时可能会溢出。 以下是该程序应满足的测试用例。
X : 0
N : 0
D : 1
expected output: 0
X : -1
N : 1
D : 20
expected output: 19
X : 71045970
N : 41535484
D : 64735492
expected output: 20805472
上面的代码满足前两个测试用例(琐碎),但在最后一个测试案例中失败。Python也被OJ所接受,如果Python,我需要一些解释。谢谢你!!
在行中
result = mymod((result * x),d);
在result * x
中,您的result
和x
都可以与d
一样大(更确切地说是d-1
),因此您需要一个数据类型,该数据类型可以容纳与d*d
一样大的整数。对于您的情况,这可能是long long int
。
另一种方法是不将库operator*
用于int
s,而是使用仅使用添加剂的类似划分和征服方法来实现手动乘法函数。这样,您将需要一个数据类型,该数据类型只能容纳与2d
一样大的整数。
还要注意,您无需每次在主循环中调用mymod
。您只能在循环之前将其调用一次,以使x
正(x=mymod(x,d)
),然后仅使用operator%
。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 如何反转整数参数包
- enum是C++中的宏变量还是整数变量
- 多态性和功能结合
- 努力将整数转换为链表。不知道我在这里做错了什么
- 整数不会重复超过随机数
- 在C++中手动调整数组大小
- 检查输入是否不是整数或数字
- C++使用整数的压缩数组初始化对象
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- C++从键盘读取整数的功能
- C++高效的整数下限功能
- 如何为内置类型添加成员功能,例如C 中的整数
- 为什么功能不给整数溢出
- 编写一个功能,该函数将使用框架交换两个整数
- 仅使用整数实施POW(X,n)%D.(不利用库功能)
- 编译时间递归函数以计算两个整数的下一个功能
- 如何在功能中的理智检查过程中处理整数的溢出
- 调整数组大小功能不会更改内存位置
- 对 64 位整数中的尾随零位进行计数的固有功能