编程题
一、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);
}
}
}

浙公网安备 33010602011771号