计算1^1+2^2+3^3+4^4+5^5+……+20^20 ,大数运算java实现
来源:互联网 发布:最好的网络推广公司 编辑:程序博客网 时间:2024/05/22 16:56
这个题目是明显的大数运算,不能直接使用int long double 早就超出范围了,要用数组结合字符串进行处理,分别实现大数的加法和乘法,
然后使用实现的加法和乘法写出来n的n次幂的实现,最后 把它们加起来
//计算1^1+2^2+3^3+4^4+5^5+……+20^20public class Main1 {public static void main(String[] args) {// TODO Auto-generated method stub String sum = "0"; //进行循环20次 从1的1次方 加到20的20次方 for(int i = 1;i<21;i++) { sum = bigNumberAdd(sum, NCiOfN(i)); } System.out.println(sum);} //这里实现 n的n次幂public static String NCiOfN(int n){String result = "1";String value = String.valueOf(n);for(int i=0;i<n;i++){ result = bigNumberSimpleMulti(result,value);}return result;}//这里用数组实现大数的相乘运算public static String bigNumberSimpleMulti(String f, String s) { // System.out.print("乘法:\n" + f + "*" + s + "="); // 获取首字符,判断是否是符号位 char signA = f.charAt(0); char signB = s.charAt(0); char sign = '+'; if (signA == '+' || signA == '-') { sign = signA; f = f.substring(1); } if (signB == '+' || signB == '-') { if (sign == signB) { sign = '+'; } else { sign = '-'; } s = s.substring(1); } // 将大数翻转并转换成字符数组 char[] a = new StringBuffer(f).reverse().toString().toCharArray(); char[] b = new StringBuffer(s).reverse().toString().toCharArray(); int lenA = a.length; int lenB = b.length; // 计算最终的最大长度 int len = lenA + lenB; int[] result = new int[len]; // 计算结果集合 for (int i = 0; i < a.length; i++) { for (int j = 0; j < b.length; j++) { result[i + j] += (int) (a[i] - '0') * (int) (b[j] - '0'); } } // 处理结果集合,如果是大于10的就向前一位进位,本身进行除10取余 for (int i = 0; i < result.length; i++) { if (result[i] > 10) { result[i + 1] += result[i] / 10; result[i] %= 10; } } StringBuffer sb = new StringBuffer(); // 该字段用于标识是否有前置0,如果是0就不需要打印或者存储下来 boolean flag = true; for (int i = len - 1; i >= 0; i--) { if (result[i] == 0 && flag) { continue; } else { flag = false; } sb.append(result[i]); } if (!sb.toString().equals("")) { if (sign == '-') { sb.insert(0, sign); } } else { sb.append(0); } // 返回最终结果 // System.out.println(sb.toString()); return sb.toString(); } //这里实现大数的相加运算public static String bigNumberAdd(String f, String s) { //翻转两个字符串,并转换成数组 char[] a = new StringBuffer(f).reverse().toString().toCharArray(); char[] b = new StringBuffer(s).reverse().toString().toCharArray(); int lenA = a.length; int lenB = b.length; //计算两个长字符串中的较长字符串的长度 int len = lenA > lenB ? lenA : lenB; int[] result = new int[len + 1]; for (int i = 0; i < len + 1; i++) { //如果当前的i超过了其中的一个,就用0代替,和另一个字符数组中的数字相加 int aint = i < lenA ? (a[i] - '0') : 0; int bint = i < lenB ? (b[i] - '0') : 0; result[i] = aint + bint; } //处理结果集合,如果大于10的就向前一位进位,本身进行除10取余 for (int i = 0; i < result.length; i++) { if (result[i] > 10) { result[i + 1] += result[i] / 10; result[i] %= 10; } } StringBuffer sb = new StringBuffer(); //该字段用于标识是否有前置0,如果有就不要存储 boolean flag = true; for (int i = len; i >= 0; i--) { if (result[i] == 0 && flag) { continue; } else { flag = false; } sb.append(result[i]); } return sb.toString(); } }结果是 124267103559737127756824517910134524
0 0
- 计算1^1+2^2+3^3+4^4+5^5+……+20^20 ,大数运算java实现
- Java实现大数运算
- Java实现大数加法运算
- Java大整数运算之计算1!+2!+…+100!的总和.
- 大数运算之加法乘法---JAVA实现
- 大数的减法运算Java代码实现
- 大数乘法运算Java代码实现
- 大数乘法计算Java代码实现
- 大数运算(4)——大数乘法
- 大数运算(3)——大数减法
- 大数运算(2)——大数加法
- 大数运算(1)——大数储存
- 5、大数,高精度计算---大数减法
- 4、 大数,高精度计算---大数加法
- 大数阶乘方法(1!+2!+3!+……+n!)
- hdu4927 Series 1(组合+公式 Java大数高精度运算)
- 有关大数的运算(2)
- 大数运算 igt答案1
- linux grep用法小白梳理(2)
- 重写、覆盖、重载、多态几个概念的区别分析
- LeetCode Algorithms 32. Longest Valid Parentheses
- Java JVM 7:内存结构
- android开源库--FilePicker
- 计算1^1+2^2+3^3+4^4+5^5+……+20^20 ,大数运算java实现
- JavaScript中trim 、indexOf
- LeetCode
- Codeforces Round #197 (Div. 2) C(dfs)
- python linspace
- matlab函数功能简介(fopen|fread|uint8|size|bitand|bitshift)
- No Persistence provider for EntityManager named JPA
- 小学数学(Java)acm.sdut
- JSF初了解