大数阶乘
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
- 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
long num = cin.nextLong();
BigInteger ans = new BigInteger("1");
while(num > 0){
ans = ans.multiply(BigInteger.valueOf(num));
num -= 1;
}
System.out.println(ans);
cin.close();
}
}
棋盘覆盖
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的2×2方格(图2为其中缺右下角的一个),去覆盖2k×2k未被覆盖过的方格,求需要类似图2方格总的个数s。如k=1时,s=1;k=2时,s=5
图2
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
int loop = cin.nextInt();
while(loop-- > 0){
int k = cin.nextInt();
BigInteger ans = new BigInteger("4");
ans = ans.pow(k).subtract(BigInteger.valueOf(1)).divide(BigInteger.valueOf(3));
System.out.println(ans);
}
}
}
比大小
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
给你两个很大的数,你能不能判断出他们两个数的大小呢?
比如123456789123456789要大于-123456
-
输入
-
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b
数据保证输入的a,b没有前缀的0。
如果输入0 0表示输入结束。测试数据组数不超过10组
输出
- 如果a>b则输出“a>b”,如果a<b则输出“a<b”,如果相等则输出“a==b”。 样例输入
-
111111111111111111111111111 88888888888888888888 -1111111111111111111111111 22222222 0 0
样例输出
-
a>b a<b
上传者
-
张云聪
-
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
BigInteger a, b;
while(true){
a = cin.nextBigInteger();
b = cin.nextBigInteger();
if(a.equals(BigInteger.valueOf(0)) && b.equals(BigInteger.valueOf(0))){
break;
}
int ans = a.compareTo(b);
if(ans == 0){
System.out.println("a==b");
}
else if(ans < 0){
System.out.println("a<b");
}
else{
System.out.println("a>b");
}
}
}
}
A+B Problem II
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
3
-
描述
-
I have a very simple problem for you. Given two integers A and B, your job is to calculate the Sum of A + B.
A,B must be positive.
-
输入
- The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow, each line consists of two positive integers, A and B. Notice that the integers are very large, that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000. 输出
- For each test case, you should output two lines. The first line is "Case #:", # means the number of the test case. The second line is the an equation "A + B = Sum", Sum means the result of A + B. Note there are some spaces int the equation. 样例输入
-
2 1 2 112233445566778899 998877665544332211
样例输出
-
Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 1111111111111111110
来源
- 经典题目 上传者
-
张云聪
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
BigInteger a, b, ans;
int loop = cin.nextInt(), i = 0;
while(i ++ < loop){
a = cin.nextBigInteger();
b = cin.nextBigInteger();
ans = a.add(b);
System.out.println("Case " + i + ":");
System.out.println(a + " + " + b + " = " + ans);
}
}
}
某种序列
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
数列A满足An = An-1 + An-2 + An-3, n >= 3
编写程序,给定A0, A1 和 A2, 计算A99-
输入
-
输入包含多行数据
每行数据包含3个整数A0, A1, A2 (0 <= A0, A1, A2 <= 100000000)
数据以EOF结束
输出
- 对于输入的每一行输出A99的值 样例输入
-
1 1 1
样例输出
-
69087442470169316923566147
来源
- 水题比赛中较不水的 上传者
-
hzyqazasdf
-
输入包含多行数据
import java.math.BigInteger;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
BigInteger ans[] = new BigInteger[100];
while(cin.hasNext()){
for(int i = 0; i < 3; i ++){
ans[i] = cin.nextBigInteger();
}
for(int i = 3; i < 100; i ++){
ans[i] = ans[i - 1].add(ans[i - 2].add(ans[i - 3]));
}
System.out.println(ans[99]);
}
高精度幂
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
对数值很大、精度很高的数进行高精度计算是一类十分常见的问题。比如,对国债进行计算就是属于这类问题。
现在要你解决的问题是:对一个实数R( 0.0 < R < 99.999 ),要求写程序精确计算 R 的 n 次方(Rn),其中n 是整数并且 0 < =n <= 25。-
输入
- 输入有多行,每行有两个数R和n,空格分开。R的数字位数不超过10位。 输出
- 对于每组输入,要求输出一行,该行包含精确的 R 的 n 次方。输出需要去掉前导的 0 后不要的 0 。如果输出是整数,不要输出小数点。 样例输入
-
95.123 120.4321 205.1234 156.7592 998.999 101.0100 12
样例输出
-
548815620517731830194541.899025343415715973535967221869852721.0000000514855464107695612199451127676715483848176020072635120383542976301346240143992025569.92857370126648804114665499331870370751166629547672049395302429448126.76412102161816443020690903717327667290429072743629540498.1075960194566517745610440100011.126825030131969720661201
来源
- POJ 上传者
-
iphxer
import java.math.BigDecimal;
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner cin = new Scanner(System.in);
BigDecimal a;
int b;
while(cin.hasNext()){
a = cin.nextBigDecimal();
b = cin.nextInt();
String ans = a.pow(b).stripTrailingZeros().toPlainString(); // 整数去掉小数点和后面的0
if(ans.startsWith("0")){ <span style="white-space:pre"> </span>//去掉前导0
ans = ans.substring(1);
}
System.out.println(ans);
}
}
}