热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

编程题:计算数值的整数次方

本题探讨如何编写程序来计算一个数值的整数次方,涉及多种情况的处理。

编程题:计算数值的整数次方


思路:

虽然看起来很简单,但实际上需要考虑多种情况(其中num是底数,count是指数,res是结果):

1. 输入的num是否为0,count是否为0;如果num为0,输出0;如果count为0,输出1。

2. count是正整数:使用for循环逐次相乘。

3. count是负整数:先计算count为正数时的结果,再取其倒数。

代码实现:


方法1:使用for循环

如果count为32,则需要循环32次,时间复杂度为O(n)。

package com.example;

import java.util.Scanner;

/**
* 计算数值的整数次方
* @author Grey Wolf
*/
public class PowerCalculator {
public static void main(String[] args) {
PowerCalculator calculator = new PowerCalculator();
calculator.run();
}

private void run() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入底数和指数:");

while (scanner.hasNext()) {
double num = scanner.nextDouble();
int count = scanner.nextInt();
System.out.println("计算结果:" + calculatePower(num, count));
}
}

/**
* 计算数值的整数次方
* @param num 底数
* @param count 指数
* @return 结果
*/
private double calculatePower(double num, int count) {
double result = 1.0;
if (count == 0) {
return 1;
}
if (num == 0 && count != 0) {
return 0;
}
int absCount = Math.abs(count);
for (int i = 1; i <= absCount; i++) {
result *= num;
}
if (count <0) {
result = 1.0 / result;
}
return result;
}
}

方法2:使用递归

利用数学公式可以减少计算次数,时间复杂度为O(logN)。

package com.example;

import java.util.Scanner;

/**
* 计算数值的整数次方
* @author Grey Wolf
*/
public class PowerCalculator {
public static void main(String[] args) {
PowerCalculator calculator = new PowerCalculator();
calculator.run();
}

private void run() {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入底数和指数:");

while (scanner.hasNext()) {
double num = scanner.nextDouble();
int count = scanner.nextInt();
double result = calculatePower(num, Math.abs(count));
if (count <0) {
result = 1.0 / result;
}
System.out.println("计算结果:" + result);
}
}

/**
* 利用数学公式计算数值的整数次方
* @param num 底数
* @param count 指数
* @return 结果
*/
private double calculatePower(double num, int count) {
if (count == 0) {
return 1;
}
if (count == 1) {
return num;
}
double result = calculatePower(num, count >> 1);
result *= result;
if (count % 2 == 1) {
result *= num;
}
return result;
}
}

测试效果:

输入整数和次方数:
0 0
计算结果:1.0
0 2
计算结果:0.0
2 2
计算结果:4.0
2 -2
计算结果:0.25

我的座右铭:不会,我可以学;落后,我可以追赶;跌倒,我可以站起来;我一定行。


推荐阅读
author-avatar
手机用户2602906791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有