在J2ME中,有时会用到开方运算,但是MIDP1.0中没有提供该功能。这里使用笔算开方的方式,实现了开任意数的n次方。这里使用了long作为运算的临时变量类型,在数值较大或者保留位数太多的时候,会出现因为long数值溢出而导致的错误。
public class MainText {
/**
* 开n次方
*
* @param root
* 被开方数
* @param n
* 开方,开n次方
* @param baoliu
* 小数部分保留的位数
* @return
*/
public static String extract(String root, int n, int baoliu) {
String[] zhengShu = null;
String[] xiaoShu = null;
int pointIndex = root.indexOf('.');
if (pointIndex == -1) {
zhengShu = getZhengShu(root, n);
xiaoShu = getXiaoshu("0", n, baoliu);
} else {
zhengShu = getZhengShu(root.substring(0, pointIndex), n);
xiaoShu = getXiaoshu(root.substring(pointIndex + 1), n, baoliu);
}
String result = "";
long a = 0;// 初值
long c = 0;// 差
long b = 0;// 尝试的商值
int index = 0;
while (index < zhengShu.length) {
c = c * power(10, n) + Long.parseLong(zhengShu[index]);
b = 1;
while (power(10 * a + b, n) - power(10 * a, n) <= c) {
b++;
if (b == 10) {
break;
}
}
b = b - 1;
c = c - (power(10 * a + b, n) - power(10 * a, n));
a = a * 10 + b;
index++;
}
result += a + ".";// 整数部分计算完毕
index = 0;
while (index < xiaoShu.length) {
c = c * power(10, n) + Long.parseLong(xiaoShu[index]);
b = 1;
while (power(10 * a + b, n) - power(10 * a, n) <= c) {
b++;
if (b == 10) {
break;
}
}
b = b - 1;
c = c - (power(10 * a + b, n) - power(10 * a, n));
a = a * 10 + b;
index++;
}
result += (a + 5) % power(10, baoliu + 1);// 这里 a + 5 是为了实现四舍五入
result = result.substring(0, result.length() - 1);// 放弃最后1位
return result;
}
/**
* 根据开方n的数值,将整数部分划分成若干片段
*
* @param str
* @param n
* @return
*/
private static String[] getZhengShu(String str, int n) {
int length = str.length() / n;
if (str.length() % n != 0) {
length += 1;
}
String[] zhengShu = new String[length];
for (int i = zhengShu.length - 1; i > 0; i--) {
zhengShu[i] = str.substring(str.length() - n);
str = str.substring(0, str.length() - n);
}
zhengShu[0] = str;
return zhengShu;
}
/**
* 根据开方n的数值和保留的位数,将小数部分划分成若干片段
*
* @param str
* @param n
* @param decimalDigits
* @return
*/
private static String[] getXiaoshu(String str, int n, int decimalDigits) {
int length = decimalDigits + 1;
while (str.length() < length * n) {
str += "0";
}
String[] xiaoShu = new String[length];
for (int i = 0; i < xiaoShu.length; i++) {
xiaoShu[i] = str.substring(0, n);
str = str.substring(n);
}
return xiaoShu;
}
/**
* 得到一个数的n次方
*
* @param shu
* @param n
* @return
*/
private static long power(long shu, int n) {
long result = 1;
while (n > 0) {
result *= shu;
n--;
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("将3开2次方,保留3位小数:" + extract("3", 2, 3));
System.out.println("将3开5次方,保留3位小数:" + extract("3", 5, 3));
System.out.println("将3.08开2次方,保留3位小数:" + extract("3.08", 2, 3));
}
}
引用:http://blog.csdn.net/cuilichen/archive/2008/09/03/2872603.aspx
分享到:
相关推荐
MIDP1.0实现开n次方运算。 使用笔算开n次方的方式,实现了开n次方运算。 输入和输出参数都是字符串形式。 这样在MIDP1.0下也可以计算小数。
复杂的BigDecimal计算,需要开方的式子,可输入结果精确位数
采用牛顿迭代发的开n次方的计算方法,可以自己设置精度(如0.00001)结果显示迭代次数等
通过汇编语言实现2的n次方,作业,调试结果正确
自己做的C++小程序,仅供参考,2的N次方2的N次方2的N次方2的N次方2的N次方
通过阅读和分析这些源码,学习者可以更好地掌握易语言的编程技巧,并加深对N次方和开N次方运算的理解。 总之,易语言计算N次方的实现涉及基本的数学运算和编程逻辑,对于初学者来说,这是一个很好的练习项目,可以...
在Java编程语言中,求一个数的n次方是一个常见的数学运算,这涉及到幂运算。在Java中,有两种主要的方法可以实现这个功能:使用Math类的pow()方法和使用循环结构自定义计算。 1. 使用Math.pow()方法: Java的Math类...
### C++实现a的n次方的不同方法及性能分析 #### 概述 在计算机科学领域,计算一个数的幂(即a的n次方)是常见的数学运算之一。本篇文章将详细介绍如何使用C++语言通过不同的算法实现a的n次方的计算,并对这些算法...
迭代法开n次方计算器是一种计算数学中求解n次方根的有效算法,它通过不断逼近目标值来求解,尤其适用于计算机程序实现。在实际应用中,迭代法常常用于解决那些不能直接求解或者计算量过大的问题,比如求平方根、...
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Class)库来开发一个功能丰富的计算器,包括加减乘除、开根号以及n次方运算。MFC是微软为Windows平台提供的一套C++类库,它使得开发者可以更加方便地...
1170:计算2的N次方 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 10500 通过数: 5410 【题目描述】 任意给定一个正整数N(N≤100),计算2的n次方的值。 【输入】 输入一个正整数N。 【输出】 输出2的N次方的值...
计算2的n次方
### 2的N次方(N为的正整数,可扩展) #### 知识点 1. **基本概念与应用场景** - **2的N次方**:指的是数字2乘以自己N次的结果。例如,2的3次方表示2×2×2=8。 - 在计算机科学、数学以及日常生活中都有广泛的...
编程精确计算2的N次方。(N是介于100和1000之间的整数)。
这个问题主要关注如何有效地计算一个大整数的n次方,其中n和结果都可能超出普通整型变量的范围。 在POJ 1001这个题目中,我们需要编写一个程序来计算一个给定的大整数的n次方。这个任务不仅要求计算准确,还要求在...
《N次方计算器:简单易用的数学工具》 在当今科技日新月异的时代,各种计算工具层出不穷,其中N次方计算器以其便捷性与实用性脱颖而出。这款软件的设计理念是为用户提供一个简单、直观且高效的计算环境,尤其适合对...
在计算机科学领域,高效地计算一个数的幂(即x的n次方)是常见的运算需求,尤其是在数学、科学计算以及工程应用中。这个话题主要涉及到算法设计与优化,特别是对于大整数处理和浮点数计算的部分。下面将详细讨论如何...
这个资源所包含的程序是用C++编程来完成求a的n次方的算法
根据给定的文件信息,我们可以总结出以下关于“实现一个数的N次方源码”的相关知识点: ### 1. 程序目的与功能 该程序的主要目的是计算并输出一个给定数值(记作a)的指定次数幂运算结果(记作b)。即用户可以输入...
易语言源码易语言计算N次方源码.rar 易语言源码易语言计算N次方源码.rar 易语言源码易语言计算N次方源码.rar 易语言源码易语言计算N次方源码.rar 易语言源码易语言计算N次方源码.rar 易语言源码易语言计算N次方...