计算99的99次方

package BigNum;

public class BigNumAdd {
    private String num1st;        // 被加数
    private String num2nd;        // 加数

    public BigNumAdd() {

    }

    public BigNumAdd(String num1st, String num2nd) {
        this.num1st = num1st;
        this.num2nd = num2nd;
    }

    public String add() {
        StringBuffer sum = new StringBuffer();
        int i = 0, a = 0, b = 0;
        int tag = 0;    // 进位数
        int j, k;        // 被加数和加数的位置
        j = num1st.length() - 1;    //模拟加法法则
        k = num2nd.length() - 1;
        while (j >= 0 || k >= 0 || tag > 0) {
            if (j >= 0) {
                a = num1st.charAt(j) - ‘0‘;
            } else
                a = 0;
            if (k >= 0) {
                b = num2nd.charAt(k) - ‘0‘;
            } else
                b = 0;
            try {
                if (a < 0 || a > 9 || b < 0 || b > 9) {
                    throw new NumberFormatException();
                }
            } catch (NumberFormatException e) {
                e.printStackTrace();
                return "Argument Error!";
            }
            i = a + b + tag;
            tag = i / 10;
            j--;
            k--;
            sum = new StringBuffer(String.valueOf(i % 10)).append(sum);
        }
        return sum.toString();
    }
}

大数乘法

package BigNum;

public class BigNumTimes {
    private String num1st;        //被乘数
    private String num2nd;        //乘数

    public BigNumTimes() {

    }

    public BigNumTimes(String num1st, String num2nd) {
        this.num1st = num1st;
        this.num2nd = num2nd;
    }

    public String times() {
        int i=0,a=0,b=0;
        int j,k;        //位置标记
        int tag=0;        //进位数
        StringBuffer sum=new StringBuffer("");
        StringBuffer preSum=new StringBuffer("0");
        StringBuffer curSum=new StringBuffer("");
        k=num2nd.length()-1;    //模拟乘法法则
        while (k>=0) {
            for (int l=0;l<num2nd.length()-1-k;l++){
                curSum.append("0");
            }
            b=num2nd.charAt(k)-‘0‘;
            j=num1st.length()-1;
            while (j>=0 || tag>0){
                if (j >= 0) {
                    a = num1st.charAt(j) - ‘0‘;
                } else
                    a = 0;
                try {
                    if (a<0 || a>9 || b<0 || b>9) {
                        throw new NumberFormatException();
                    }
                    }catch (NumberFormatException e){
                        e.printStackTrace();
                        return "Argument Error!";
                    }
                i=b*a+tag;
                tag=i/10;
                curSum=new StringBuffer(String.valueOf(i%10)).append(curSum);
                j--;
            }
            tag=0;
            k--;
            sum=new StringBuffer(new BigNumAdd(curSum.toString(),preSum.toString()).add());  //一轮结果相加
            preSum=new StringBuffer(sum);
            curSum=new StringBuffer("");
        }
        return sum.toString();
    }
    //99的99次方
    public static void main(String[] args){
        String sum="1";
            for (int i=1;i<=99;i++){
                BigNumTimes bnt=new BigNumTimes(sum,"99");
                sum=bnt.times();
                System.out.println("99的"+i+"次方="+sum);
            }
            //System.out.println("位数="+sum.length());
    }
}

link:http://blog.csdn.net/asdflixiaok/article/details/40486341

时间: 2024-10-17 04:03:49

计算99的99次方的相关文章

AC日记——计算2的N次方 openjudge 1.6 12

12:计算2的N次方 总时间限制:  1000ms 内存限制:  65536kB 描述 任意给定一个正整数N(N<=100),计算2的n次方的值. 输入 输入一个正整数N. 输出 输出2的N次方的值. 样例输入 5 样例输出 32 提示 高精度计算 思路: 模拟: 来,上代码: #include<cstdio> using namespace std; int n; char s[101]; int main() { s[0]=1; scanf("%d",&n

六道题 : 1.设计一个函数,用来计算b的n次方 2.(n! = 1*2*3*4*...n) 3.(1! + 2! + 3! + 4! + ... + n!) 4.成绩 5. 数组中的元素逆序存放 6.九九乘法口诀

/* 设计一个函数,用来计算b的n次方 递归的2个条件: 1.函数自己调用自己 2.必须有个明确的返回值 */ #include <stdio.h> int pow2(int b, int n); int main() { int c = pow2(3, 2); printf("%d\n", c); return 0; } /* pow2(b, 0) == 1 pow2(b, 1) == b == pow2(b, 0) * b pow2(b, 2) == b*b == po

【算法】高效计算n的m次方

今天看到了一个非常好的算法,数学什么什么定理我不懂,但这算法值得我学习. 目的:计算n的m次方 int power(int n,int m) { int odd=1;//用来把剩下的数乘进去 while(p>1){ if((m & 1) != 0)odd*=n; else n*=n; p/=2; } return n*odd; }

计算2的n次方的三种方法(C语言实现)

C代码如下: 1 #include <stdio.h> 2 3 int func1(int n) 4 { 5 return 1<<n; 6 } 7 8 int func2(int n) 9 { 10 11 if(n==0) 12 { 13 return 1; 14 } 15 16 return func2(n-1)*2; 17 } 18 19 int func3(int n) 20 { 21 int c=1, i; 22 for(i=0; i<n; i++) 23 { 24

汇编实验一——利用这3条指令计算2的8次方

安装dosbox 运行 DOSBox 0.74 (noconsole) 实验内容: 将下面3条指令写入2000:0开始的内存单元中,利用这3条指令计算2的8次方. mov ax,1 add ax,ad jmp 2000:3 原文地址:https://www.cnblogs.com/wszme/p/9192992.html

通过例子进阶学习C++(五)计算2的1次方至2的64次方之和

本文是通过例子学习C++的第五篇,通过这个例子可以快速入门c++相关的语法. 1.上篇回顾 在上一篇中,我们通过字符数组计算264次方: 通过例子进阶学习C++(四)计算2的64次方 带着这个问题:为什么用字符数组,不用整数数组,开始本文. 2.先计算1+2+3+...100的和并总结规律 本题目直接实现,有点复杂,我们先计算1+2+3+...100的和,总结规律后再来计算. 这个是一个经典的循环问题,可以用for.while.do-while求和. #include<iostream> us

Python 练习一(计算1-2+3-4...+99)

# 求1-99的所有数的和 count = 1 s = 0 while count < 100: s += count count += 1 print(s) 当都为正数时,即1+2+3+...+99,如上,很简单: 其实,计算正负相间的式子也很简单,只需要加上一个标记正负号的变量乘到计数器上即可. count = 1 s = 0 sign = 1 # 用来标记正负号 while count < 100: s += sign * count sign = -sign #每次执行累加后,把标记赋

计算2的任意次方[通用版]

位数计算: [ N*log2 ] +1 #include <iostream> #include <cmath> using namespace std; int main() { int Bits,Tp=0,n,j,power_value; double y=2; double x=log10(y); cin>>power_value; Bits=(int)(power_value*x+1);//Bits为位数: int *a=(int *)malloc(Bits*s

网络高可用衡量指标99 999 9999 99999 99% 99.9% 99.99% 99.999

网站可用性所谓网站可用性(availability)也即网站正常运行时间的百分比,业界用 N 个9 来量化可用性, 最常说的就是类似 "4个9(也就是99.99%)" 的可用性. 容灾恢复能力的关键指标 RPO:(Recovery Point Obejective,恢复点目标)是指业务系统所允许的在灾难过程中的最大数据丢失量,用来衡量容灾系统的数据冗余备份能力. RTO:(Recovery Time Objective,恢复时间目标)是指信息系统从灾难状态恢复到可运行状态所需的时间,用