编程题

一、1000的阶乘问题

思路:用一位数组表示一个数(1000的阶乘结果2560位),写一个一位数组的加法和乘法

     乘法可以看成乘数的每一位所代表的数与因数相乘,将结果相加即可得到结果。

import java.util.Scanner;

public class Main{
	public static void main(String argsp[])
	{
		Scanner scan = new Scanner(System.in);
		//System.out.print("Input");
		int n = scan.nextInt();
		
		 int a [] = new int [100000];
		 a [99999] = 1;
		for(int i = 1;i<=n;i++)
		{
			multiple1(a,i);                    //阶乘
		}
		out(a);
		
		
	}

	static void multiple1(int a [],int n)        //各位分别乘以因数
	{
		for (int j=0;j<a.length;j++)
		{
			a[j]=a[j]*n;
		}
		move(a);			
		
	}
	static void move(int a[])              //移位
	{
		for(int i = a.length-1;i>=4;i--)
		{
			if(a[i]>999)
			{
				a[i-3]+=a[i]/1000;
				a[i]=a[i]%1000;
			}
			
			if(a[i]>99)
			{
				a[i-2]+=a[i]/100;
				a[i]=a[i]%100;
			}
			if(a[i]>9)
			{
				a[i-1]+=a[i]/10;
				a[i]=a[i]%10;
			}
		}
			
	}
	static void out(int a[])        //输出结果
	{
		int flag = 0;
		for(int num : a)
		{
			if(num!=0)
			{
				System.out.print(num);
				flag = 1;
			}
			if (num==0 && flag != 0)
				System.out.print(num);
		}
	}
}                

二、大数相加

知识点:输入超过基本类型范围,通过字符串存储数据,通过char型数组分割每一位的数据通过利用char的封装类 character, 将获取char型变量存储的iint数据。

    public static int getNumericValue(char ch) {
        return getNumericValue((int)ch);
    }

  转载自https://blog.csdn.net/sxb0841901116/article/details/20623123

大数相加代码

import java.util.*;
public class Main{
	public static void main(String args[])
	{
		Scanner scan = new Scanner(System.in);
		String a = scan.nextLine();
		String b = scan.nextLine();
		char[] numa = a.toCharArray();
		char[] numb = b.toCharArray();
		int [] numc = new int [101];
		int i = numa.length-1;
		int j = numb.length-1;
		int c = numc.length-1;
		while(i>=0||j>=0)
		{
			if(i>=0&&j>=0)
			numc[c--]=Character.getNumericValue(numa[i--])+Character.getNumericValue(numb[j--]);
			if(i<0&&j>=0)
				numc[c--]=Character.getNumericValue(numb[j--]);
			if(i>=0&&j<0)
				numc[c--]=Character.getNumericValue(numa[i--]);
		}
		move(numc);
		out(numc);
		
		
		
	}
	static void move(int a[])
	{
		for(int i = a.length-1;i>=2;i--)
		{
			
			
			if(a[i]>9)
			{
				a[i-1]+=a[i]/10;
				a[i]=a[i]%10;
			}
		}
			
	}
	static void out(int a[])
	{
		int flag = 0;
		for(int num : a)
		{
			if(num!=0)
			{
				System.out.print(num);
				flag = 1;
			}
			if (num==0 && flag != 0)
				System.out.print(num);
		}
	}
}

  

 

posted @ 2020-04-26 16:06  KeyGun  阅读(221)  评论(0)    收藏  举报