最全大整数的操作—阶乘,加法,乘法-----比对C++与java,腾讯数据分析面试春招2024

最后

对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。

整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

美团二面惜败,我的凉经复盘(附学习笔记+面试整理+进阶书籍)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

#include<bits/stdc++.h>

using namespace std;

const int Maxn=10e5;

int a[Maxn]; // 用数组a来存储每一位

int main()

{

int n;

while(cin>>n)

{

memset(a,0,sizeof(a)); // 先初始化为0;

a[0]=1; // 先将a[0]赋值为1;

int p=1; // p代表数组a[p]还未开始储存数字

for(int i=2;i<=n;i++) // 模拟n的阶乘

{

int up=0,temp=0; // temp临时储存a[j]*i的值,up代表进位值

for (int j=0;j<p;j++) // 将 a[j]与i相乘,此处为一个遍历;

{

temp=a[j]*i+up;

up=temp/10;

a[j]=temp%10;

}

while(up>0) // 如果up>0;说明往a[p]里面存值了

{

a[p++]=up%10;

up/=10;

}

}

for(int i=p-1;i>=0;i–) // 数组的逆序输出;

cout<<a[i];

cout<<endl;

}

return 0;

}

  • 下面是java的操作:

  • AC源码:(ps:这是一段比较简单的代码就不多注释了)

package javaLearn;

import java.util.*;

import java.math.*;

public class bigInter {

public static void main(String[] args) {

Scanner cin=new Scanner(System.in);

while (cin.hasNext())

{

int n=cin.nextInt();

BigInteger sum=new BigInteger(“1”);

BigInteger flag=new BigInteger(“1”);

for(int i=0;i<n;i++)

{

sum=sum.multiply(flag);

flag=flag.add(new BigInteger(“1”));

}

System.out.println(sum);

}

}

}

下面着重解释一下:

java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大。这两个类都在java.math.*包中,因此每次必须在开头处引用该包。

Ⅰ基本函数:

1.valueOf(parament); 将参数转换为制定的类型

比如 int a=3;

BigInteger b=BigInteger.valueOf(a);

则b=3;

String s=”12345”;

BigInteger c=BigInteger.valueOf(s);

则c=12345;

2.add(); 大整数相加

BigInteger a=new BigInteger(“23”);

BigInteger b=new BigInteger(“34”);

a.add(b);

3.subtract(); 相减

4.multiply(); 相乘

5.divide(); 相除取整

6.remainder(); 取余

7.pow(); a.pow(b)=a^b

BigInteger


​ 如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作。

img

​ BigInteger是在java.math包中。

  • 样例代码:

//实例化一个大数字

BigInteger num1 = new BigInteger(“4”);

//将普通的数值转换为大数值

BigInteger num2 = BigInteger.valueOf(3);

//取该大数字加2的操作

System.out.println(“加法操作:”+ num1.add(num2));

//取该大数字减2的操作

System.out.println(“减法操作:”+ num1.subtract(num2));

//取该大数字乘以2的操作

System.out.println(“乘法操作:”+ num1.multiply(num2));

//取该大数字除以2的操作

System.out.println(“除法操作:”+ num1.divide(num2));

//求余

System.out.println(“取余:”+ num1.remainder(num2));

System.out.println(“取余:”+ num1.mod(num2));

//取该大数字的2次方

System.out.println(“做2次方操作:”+ num1.pow(2));

//取该大数字的相反数

System.out.println(“取相反数操作:”+ num1.negate());

//取最大公约数

System.out.println(“取最大公约数:”+ num1.gcd(num2));

//取绝对值

System.out.println(“取绝对值:”+ num1.abs());

//判断相等

System.out.println(“判断相等:”+ num1.equals(num2));

//比较大小

System.out.println(“比较大小:”+ num1.compareTo(num2));

//取较大值

System.out.println(“取较大值:”+ num1.max(num2));

BigDecimal


​ 使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用。

​ 对于不需要任何准确计算精度的程序可以直接使用float或double完成,但是如果需要精确计算结果,则必须使用BigDecimal类。

img

  • 用法示例:

//实例化一个大数字

BigDecimal num1 = new BigDecimal(“4.10”);

//将普通的数值转换为大数值

BigDecimal num2 = BigDecimal.valueOf(3.9);

//取该大数字加操作

System.out.println(“加法操作:”+ num1.add(num2));

//取该大数字减操作

System.out.println(“减法操作:”+ num1.subtract(num2));

//取该大数字乘操作

System.out.println(“乘法操作:”+ num1.multiply(num2));

//取该大数字除操作

System.out.println(“除法操作:”+ num1.divide(num2, 4, RoundingMode.HALF_UP));

//取该大数字的相反数

System.out.println(“取相反数操作:”+ num1.negate());

//取绝对值

System.out.println(“取绝对值:”+ num1.abs());

//判断相等, 当且仅当两个BigDecimal对象数值和精度scale均相等时才返回true

System.out.println(“判断相等:”+ num1.equals(BigDecimal.valueOf(41, 1)));

System.out.println(“判断相等:”+ num1.equals(BigDecimal.valueOf(410, 2)));

//比较大小,仅比较两个BigDecimal对象数值是否相等,忽略精度

System.out.println(“比较大小:”+ num1.compareTo(BigDecimal.valueOf(41, 1)));

System.out.println(“比较大小:”+ num1.compareTo(BigDecimal.valueOf(410, 2)));

//取较大值

System.out.println(“取较大值:”+ num1.max(num2));

我以大整数为例,用代码示例一次:

package javaLearn;

import java.util.*;

import java.math.*;

public class bigInter {

public static void main(String[] args) {

  Scanner cin=new Scanner(System.in);
  while (cin.hasNext())
  {
  	BigInteger sum=cin.nextBigInteger();
  	BigInteger flag=cin.nextBigInteger();
  	System.out.println("乘法操作:"+sum.add(flag));
  	System.out.println("减法操作:"+ sum.subtract(flag)); 
  	System.out.println("乘法操作:"+ sum.multiply(flag));
      System.out.println("除法操作:"+ sum.divide(flag)); 
     System.out.println("取余:"+ sum.remainder(flag));
      System.out.println("取最大公约数:"+ sum.gcd(flag)); 
  }

}

总结

对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

image

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)

[外链图片转存中…(img-kuxNiRKW-1715599721269)]

Java面试精选题、架构实战文档

整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~

你的支持,我的动力;祝各位前程似锦,offer不断!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值