1、阶乘之和
刚刚看到题的时候,这不简简单单吗,直接上手
结果一顿操作猛如虎
仔细一看,值太大过不了
这可怎么办,看题解吧,完蛋看不懂,什么高精度,尤其还是c++,更看不懂了
最后求助万能的老师,发现了可以使用BigInteger类来解决
这是老师发我的大佬的BigInteger类讲解
看完之后任督二脉打通了
将代码进行修改之后
import java.util.Scanner;
import java.math.BigInteger;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
BigInteger sum = new BigInteger("0");
//这里的“0” 是对BigInteger进行初始化,代表从0开始
for (int i = 1; i <= n; i++) {
BigInteger tmp = new BigInteger("1");
for (int j = 1; j <= i; j++) {
tmp = tmp.multiply(new BigInteger(Integer.toString(j)));
}
sum = sum.add(tmp);
}
System.out.println(sum);
}
最后成功运行
2、ISBN 号码
刚看到这道题,这么多的字,头都大了
经过仔细阅读之后发现其实并不难
首先:
我们要解决的是如何把这一串字符输入进去
其次:
我们要知道怎么把 - 摘出去,再对这串数字进行计算
最后:
我们怎么输入输入的这串字符的前11个 和我们自己计算的后两位
接下来让我们看一下代码
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = 0;
int a = 0;
for (int i = 0; i < 11; i++) {
if (str.charAt(i) == '-') {
continue;
}else {
n++;
a = a + ((int)str.charAt(i) - '0') * n;
}
}
String s = a%11 + "";
if ((int)str.charAt(str.length() - 1) == ((a%11 + '0') > '9' ? 'X' : (a%11 + '0'))) {
System.out.println("Right");
}else {
System.out.printf("%11.11s-%s", str, s.equals("10")?"X":s);
}
}
}
成功运行
但是我们这里要知道一个点, “%11.11s-%s” 这个是极为特殊的输出方式
意思是把str 的前11个字符按照输入的格式进行输出