求m的n次方(大数)

import java.util.Scanner;

public class Main {

	public static void main(String[] args){
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		// 最大存储50位数
		int[] nums = new int[50]; // (下标0,1,2....分别代表个位,十位,百位)
		int k = 0;
		int m = 0;
		int n = 0;
		int count = 0;
		int z = 0;
		String num = "";
		System.out.println("输入m^n次方");
		System.out.print("输入m:");
		m = in.nextInt();
		System.out.print("输入n:");
		n = in.nextInt();
		z = m;
		while(z>0) // 将m按照模拟分配到相应位数
		{
			nums[count++] = z%10;
			z /= 10;
		}
		System.out.printf("%d的%d次方为:",m,n);
		if(n==0)
		{
			System.out.println(1);
		}
		else if(n>0)
		{
			for(int i=0;i<n-1;i++)  // 1次已有故只需求后面n-1次
			{
				for(int j=0;j<nums.length;j++)
				{
					int sum = 0;
					if(j==0)
					{
						nums[j] *= m;
					}
					else if(nums[j-1] < 10) // 若上次进位查看上次是否小于10
					{
						nums[j] *= m;
					}
					else // 若上次进位查看上次是否大于等于10,从上次位置开始
					{
						j--;
					}
					if(nums[j] >= 10) // 大于等于10向前进位
					{
						sum = nums[j]/10;
						nums[j] %= 10;
					}
					if(sum != 0) // 向前进位
					{
					    // 要先求上位在加上进位
						j++;
						nums[j] *= m;
						nums[j] += sum;
					}
				}
			}
			for(int i=nums.length-1;i>=0;i--) // 找到最后一位非零,即最高位
			{
				if(nums[i] != 0)
				{
					k = i;
					break;
				}
			}
			for(int i=k;i>=0;i--)
			{
				num += nums[i];
			}
			System.out.println(num);
		}
		in.close();
	}
	
}

猜你喜欢

转载自blog.csdn.net/weixin_45735242/article/details/104882018
今日推荐