目录
OJ链接:http://lx.lanqiao.cn/problemset.page?code=BASIC-&userid=301077
虽然大三了,对算法掌握的不是很好,这些题的我的解题思路大部分都是比较常规的解法,没有涉及到数据结构和复杂算法,希望能帮助到大家。类名以题目和题号命名,思路写在注释,AC代码依次如下。
BASIC-01 A+B问题
package 蓝桥杯系统入门训练;
import java.util.*;
public class A加B问题{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer a = sc.nextInt();
Integer b = sc.nextInt();
System.out.println(a + b);
}
}
BASIC-02 序列求和
package 蓝桥杯系统入门训练;
import java.util.Scanner;
public class 入门训练_序列求和 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextInt();
System.out.println((1+n)*n/2);//n很大时,用循环做会超时!
}
}
BASIC-03 圆的面积
package 蓝桥杯系统入门训练;
import java.util.Scanner;
public class 入门训练_圆的面积 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
double r = sc.nextDouble();
System.out.printf("%.7f",Math.PI*r*r);//3.1415926535
}
}
BASIC-04 Fibonacci数列
package 蓝桥杯系统入门训练;
import java.util.Scanner;
public class 入门训练_Fibonacci数列 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int size=1000000;
int[] a = new int[size];
a[0]=1;a[1]=1;
for(int i=2;i<n;i++){
a[i]=a[i-1]+a[i-2];
a[i]=a[i]%10007;
}
System.out.println(a[n-1]);
}
}
BASIC-1 闰年判断
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 闰年判断01 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int y = in.nextInt();
if ((y%4==0&&y%100!=0)||y%400==0) {
System.out.println("yes");
}
else {
System.out.println("no");
}
}
}
BASIC-2 01字串
package 蓝桥杯系统基础练习;
public class 零一子串02 {
public static void main(String[] args) {
for (int j = 0; j < 32; j++) {
String str = Integer.toBinaryString(j);
System.out.printf("%05d",Integer.valueOf(str));
System.out.println();
}
}
}
BASIC-3 字母图形
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 字母图形03 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
int cnt;
String c="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for (int i = 0; i < a; i++) {
cnt=0;
if(i>0)
for(int k=i-1;k>=0;k--) {
System.out.print(c.charAt(k+1));
cnt++;
if(cnt==b)break;
}
for (int j = i; j < b; j++) {
System.out.print(c.charAt(j-i));
}
System.out.println();
}
}
}
BASIC-4 数列特征
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 数列特征04 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a= new int[10005];
int max=-10000,min=10000,sum=0;
for (int i = 0; i < n; i++) {
a[i]=in.nextInt();
if(a[i]>max)max=a[i];
if(a[i]<min)min=a[i];
sum+=a[i];
}
System.out.print(max+"\n"+min+"\n"+sum);
}
}
BASIC-5 查找整数
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 查找整数05 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n= in.nextInt();
int[] a = new int[1005];
for (int i = 0; i < n; i++) {
a[i]=in.nextInt();
}
int find=in.nextInt();
int flag=1;
for (int i = 0; i < n; i++) {
if(a[i]==find) {
System.out.println(i+1);
flag=0;
break;
}
}
if(flag==1)System.out.println(-1);
}
}
BASIC-6 杨辉三角形
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 杨辉三角06 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int[][] a= new int[35][35];
a[1][1]=1;
System.out.println(1);
for (int i = 2; i <= n; i++) {
for (int j = 1; j <= i; j++) {
a[i][j]=a[i-1][j-1]+a[i-1][j];//保存a[i][j]
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
BASIC-7 特殊的数字
package 蓝桥杯系统基础练习;
public class 特殊的数字07 {
public static void main(String[] args) {
int ge,shi,bai;
for (int i = 100; i <1000; i++) {
ge=i%10;
shi=i/10%10;
bai=i/100;
if(i==Math.pow(ge,3)+Math.pow(shi,3)+Math.pow(bai,3)) {
System.out.println(i);
}
}
}
}
BASIC-8 回文数
package 蓝桥杯系统基础练习;
public class 回文数08 {
public static void main(String[] args) {
int ge,shi,bai,qian;
for(int i=1000;i<10000;i++) {
ge=i%10;
shi=i/10%10;
bai=i/100%10;
qian=i/1000;
if(ge==qian&&shi==bai)
System.out.println(i);
}
}
}
BASIC-9 特殊回文数
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 特殊回文数09 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
for(int w1=0;w1<10;w1++) {
for(int w2=0;w2<10;w2++) {
for(int w3=0;w3<10;w3++) {
for(int w4=0;w4<10;w4++) {
for(int w5=1;w5<10;w5++) {
if(w1+w2+w3+w4+w5==n&&w1==w5&&w2==w4)
System.out.println(10000*w5+1000*w4+100*w3+10*w2+w1);
}
}
}
}
}
for(int w1=0;w1<10;w1++) {
for(int w2=0;w2<10;w2++) {
for(int w3=0;w3<10;w3++) {
for(int w4=0;w4<10;w4++) {
for(int w5=0;w5<10;w5++) {
for(int w6=1;w6<10;w6++) {
if(w1+w2+w3+w4+w5+w6==n&&w1==w6&&w2==w5&&w3==w4)
System.out.println(100000*w6+10000*w5+1000*w4+100*w3+10*w2+w1);
}
}
}
}
}
}
}
}
BASIC-10 十进制转十六进制
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 十进制转十六进制10 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num =in.nextInt();
String str = Integer.toHexString(num);//将数字转换成十六进制
System.out.println(str.toUpperCase());//小写转为大写字母,数字不变
}
}
BASIC-11 十六进制转十进制
package 蓝桥杯系统基础练习;
import java.util.Scanner;
public class 十六进制转十进制11 {
public static int toTenbit(char c) {
switch(c) {
case 'A':return 10;
case 'B':return 11;
case 'C':return 12;
case 'D':return 13;
case 'E':return 14;
case 'F':return 15;
default:return c-48;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String str=in.next();
long sum=0;
char[] c=str.toCharArray();//将字符串对象的字符转化为字符数组
for (int i = c.length-1; i >=0; i--) {
sum+=toTenbit(c[i])*Math.pow(16, c.length-i-1);
}
System.out.println(sum);
}
}
BASIC-12 十六进制转八进制
package 蓝桥杯系统基础练习;
/* 思路:
* 将十六进制转成二进制,再将二进制转成八进制。
* 过程中16-2的转换是四位一组,2-8的是三位一组,中间要补上位数不足的零。
* 在将十六进制转换为二进制完成后,记得算一下长度是不是3的倍数,
* 如果不是记得补齐,不然三位一个转八进制时就会因为位数不足出错。
* 最后输出的时候,用正则表达式将八进制前面的0去掉.
*/
import java.util.Scanner;
public class 十六进制转八进制12 {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
String arr[] = new String[n];
for(int i = 0;i < n;i++) {
arr[i] = in.next();
}
for(int i = 0;i < arr.length;i++) {
String s = HextoOct(arr[i]);
System.out.println(s.replaceFirst("^0", ""));//使用给定的参数""替换字符串第一个匹配给定的正则表达式(一或多个零)的字符串。去开头多余的零。
}
}
private static String HextoOct(String s) {
StringBuffer s1=new StringBuffer("");
//十六进制转二进制
for(int i=0;i<s.length();i++) {
switch(s.charAt(i)) {//charAt(int index)用来检索特定索引下的字符的String实例.
case '0':s1.append("0000");break;
case '1':s1.append("0001");break;
case '2':s1.append("0010");break;
case '3':s1.append("0011");break;
case '4':s1.append("0100");break;
case '5':s1.append("0101");break;
case '6':s1.append("0110");break;
case '7':s1.append("0111");break;
case '8':s1.append("1000");break;
case '9':s1.append("1001");break;
case 'A':s1.append("1010");break;
case 'B':s1.append("1011");break;
case 'C':s1.append("1100");break;
case 'D':s1.append("1101");break;
case 'E':s1.append("1110");break;
case 'F':s1.append("1111");break;
}
}
s = s1.toString();//s1转换为字符串
//字符的长度如果不能整除3,则需要在转换的结果前补0;
if (s.length()%3 == 1)
s = "00"+s;
else if(s.length()%3 == 2)
s = "0"+s;
StringBuffer s2 =new StringBuffer("");
//二进制转八进制
for(int i = 0;i < s1.length();i+=3) {
String str = s.substring(i, i+3);//substring(x,y)是从x到y前的位置停止
switch(str) {
case "000":s2.append('0');break;
case "001":s2.append('1');break;
case "010":s2.append('2');break;
case "011":s2.append('3');break;
case "100":s2.append('4');break;
case "101":s2.append('5');break;
case "110":s2.append('6');break;
case "111":s2.append('7');break;
}
}
return s2.toString();
}
}
BASIC-13 数列排序
package 蓝桥杯系统基础练习;
import java.util.Arrays;
import java.util.Scanner;
public class 数列排序13 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int []a = new int[n];
for (int i = 0; i < n; i++) {
a[i]=in.nextInt();
}
Arrays.sort(a);
for (int i = 0; i < n; i++) {
System.out.print(a[i]+" ");
}
}
}
BASIC-14 VIP试题 时间转换
package 基础练习VIP;
import java.util.Scanner;
public class 时间转换14 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int num=in.nextInt();
int shi,feng,miao;
shi=num/3600;
feng=(num-shi*3600)/60;
miao=num%60;
System.out.println(shi+":"+feng+":"+miao);
}
}
BASIC-15 VIP试题 字符串对比
package 基础练习VIP;
import java.util.Scanner;
public class 字符串对比15 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1=in.next();
String s2=in.next();
if(s1.length()!=s2.length())System.out.println(1);
else if (s1.equals(s2))System.out.println(2);
else if (s1.toLowerCase().equals(s2.toLowerCase()))System.out.println(3);
else System.out.println(4);
}
}
BASIC-16 VIP试题 分解质因数
package 基础练习VIP;
import java.util.Scanner;
public class 分解质因数16 {
public static boolean isPrime(int n) {
for(int i=2;i*i<=n;i++) {
if(n%i==0)return false;
}
return true;
}
public static String resolve(int n) {
String str="";
int i=2;
while (n!=1) {
if(isPrime(i)&&n%i==0) {//如果i是质数且能被n整除
str=str+"*"+i;
n=n/i;
}
else i++;//质因数从小到大排序
}
return str.substring(1);//去掉首字符*:截取索引从一开始的字符串
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a=in.nextInt();
int b=in.nextInt();
for(int i=a;i<=b;i++)
if(isPrime(i)==true)System.out.println(i+"="+i);
else System.out.println(i+"="+resolve(i));
}
}
BASIC-17 VIP试题 矩阵乘法
package 基础练习VIP;
import java.util.Scanner;
public class 矩阵乘法17 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a[][]=new int[35][35];
int r[][]=new int[35][35]; //结果
int N=in.nextInt();
int M=in.nextInt();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
a[i][j]=in.nextInt();
}
}
for (int i = 0; i < N; i++) {
r[i][i]=1;//单位矩阵,如同数的乘法中的1
}
for (int m = 0; m < M; m++) { //M次幂
int t[][]=new int[35][35]; //引入临时变量
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++) {//每个元素对应相乘再相加
t[i][j]+=r[k][j]*a[i][k];
}
}
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
r[i][j]=t[i][j]; //更新a数组的值
}
}
t=null; //t清零再次做乘法运算
}
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(r[i][j]+" ");
}
System.out.println();
}
}
}
BASIC-18 VIP试题 矩形面积交
package 基础练习VIP;
import java.util.Scanner;
public class 矩形面积交18 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double x[]=new double[5];
double y[]=new double[5];
double x1,y1,x2,y2; //交集矩形的左下和右上坐标
for (int i = 1; i < 5; i++) {
x[i]=in.nextDouble();
y[i]=in.nextDouble();
}
//例如:首先交集矩形的左下横坐标:肯定是每个矩形的横坐标较小的一个,
//之后交集矩形的左下横坐标肯定是在中间,所以x1再取最大值
x1=Math.max(Math.min(x[1],x[2]),Math.min(x[3],x[4]));//左下横坐标
y1=Math.max(Math.min(y[1],y[2]),Math.min(y[3],y[4]));//y坐标同理
x2=Math.min(Math.max(x[1],x[2]),Math.max(x[3],x[4]));//右上横坐标
y2=Math.min(Math.max(y[1],y[2]),Math.max(y[3],y[4]));
// System.out.println(x1);
// System.out.println(y1);
// System.out.println(x2);
// System.out.println(y2);
if(y2>y1&&x2>x1)System.out.printf("%.2f",(y2-y1)*(x2-x1));
else System.out.println("0.00");
}
}
BASIC-19 VIP试题 完美的代价
package 基础练习VIP;
/*思路
先说不可能的情况:①字符串长度是偶数,字符串中出现了某个出现次数为奇数的字符
②字符串长度是奇数,字符串中出现了一个以上出现次数为奇数的字符
解题思路为:
①设置边界front,end。
②从后往前寻找与front处相同的字符。
③若找到,则把这个字符移动到end处(因为题目规定只能相邻的两个字符移动,所以此处是指一个一个的移动,
直到把目标字符移动到end处),并计算移动的次数,然后缩小边界:front++;end–;
若没有找到,则判断是否为“Impossible”情况,若是则输出“Impossible”并结束程序;
若不是则计算将此字符移动到中间位置所需次数(只是计算次数,并不需要真正的移动),然后缩小边界:front++;
④重复①~③步骤,直到front >= end
⑤输出结果
ps.若是提前将出现次数为奇数的字符移动到中间位置,那么接下来的每一次交换次数都会+1,
所以这个字符要在最后一步才把它移动到中间位置。
*/
import java.util.Scanner;
public class 完美的代价19 {
static char[] swap(char[] c,int before,int obj) {//交换c[before]到位置c[obj]
char tem=c[before]; //先保存c[before]的字符,因为之后会往前推
for (int i = before; i < obj; i++) {
c[i]=c[i+1]; //把目标索引之前的字符往前推一
}
c[obj]=tem; //目标位置替换为之前的字符
return c;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
String s=in.next();
//char[] c=s.toCharArray();//将字符串对象的字符转化为字符数组
char[] c=new char[n];
for(int i=0;i<n;i++){
c[i] = s.charAt(i);
}
int front=0,end=n-1,times=0;
boolean flag=false;
while (front<end) {
for (int i = end; i >= front; i--) {
if (i==front) {//如果没找到和front处相同的字符,即front处是一个出现次数为奇数的字符
if(n%2==0||flag) {
System.out.println("Impossible");
System.exit(0);
}
else {
times +=n/2-front;
flag=true;//出现次数为奇数的字符找到了一次,若再出现一次则Impossible
front++;
break;
}
}
if(c[i]==c[front]) {
c=swap(c,i,end);
times+=end-i;
front++;end--;
break;
}
}
}
System.out.println(times);
}
}
BASIC-20 VIP试题 数的读法
package 基础练习VIP;
import java.util.Scanner;
public class 数的读法20 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s=in.next();
int len=s.length();
char[] str=s.toCharArray();
String[] num= {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};//0-9
//11位读数:因为数值大小不超过2,000,000,000
// 20,0000,0000
// bit位数倒序
String[] bit= {"","","shi","bai","qian","wan","shi","bai","qian","yi","shi"};
int j;
for (int i = 0; i < len; i++) {
j=str[i]-48; //将各位上的数由字符型转换为int型
//System.out.println(j);
if(j==0) {//当前的数是0
if(i<len-1) {//当下字符不是末字符
if(str[i+1]!=48)//下一个字符不是0
System.out.print(num[j]+" ");//读零
}
}
else if((len-i==2||len-i==6||len-i==10)&&j==1) {
System.out.print(bit[len-i]+" ");//当前的数是1且位数读十
}
else if(i>=1&&str[i-1]==48&&j==1) {//当前的数是1且上一个数是零,且位数不读十
System.out.print(bit[len-i]+" ");
}
else //当前的数非0非1;当前的数是1且上一个数非零:直接读数
System.out.print(num[j]+" "+bit[len-i]+" ");
}
}
}
BASIC-22 VIP试题 FJ的字符串
package 基础练习VIP;
import java.util.Scanner;
public class FJ的字符串22 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
System.out.println(AN(n));
}
static String AN(int n) {
if (n==1) {
return "A";
}
else {
char c=(char) ('A'+n-1);
return AN(n-1)+String.valueOf(c)+AN(n-1);
}
}
}
BASIC-23 VIP试题 芯片测试
package 基础练习VIP;
import java.util.Scanner;
/*这个題其实关键的解题就一个,
*只要其他的芯片对一个芯片的判断结果是1的个数大于0的个数,就可以判断这个是一个好芯片。为什么呢?
*因为题目中说了,其中坏的芯片的判断是随即的要不是1要不是0,
*所以对一个好的芯片(被检测)的判断而言,用坏的去判断(检测方)这个好的,显示1和显示0的概率都是50%,
*而如果还有一个好的芯片(检测方)也去判断这个好的芯片(被检测),这个结果一定是1,
*所以这个显示1的总数一定会大于显示0的个数,即显示1的总数大于总数的一半。*/
public class 芯片测试23 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int a[][]=new int[21][21];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
a[i][j]=in.nextInt();
}
}
int sum;//用第i块芯片测试第j块芯片时得到的测试结果为好的个数
for (int j = 0; j < n; j++) {//其他的芯片对第j块芯片的判断
sum=0;
for (int i = 0; i <n; i++) {
sum+=a[i][j];
}
if (sum>n/2) {
System.out.print(j+1+" ");
}
}
}
}
BASIC-24 VIP试题 龟兔赛跑预测
package 基础练习VIP;
import java.util.Scanner;
public class 龟兔赛跑预测24 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int v1=in.nextInt();
int v2=in.nextInt();
int t=in.nextInt();
int s=in.nextInt();
int l=in.nextInt();
int s1=0,s2=0,cnt=0;
for (int i = 1;s1<l&&s2<l; i++) {
s1+=v1;
s2+=v2;
if(s1>=l)continue;//易错点:若兔子已到达终点,不执行后面的代码(乌龟的路程不能再变化)
if (s1-s2>=t) {
s2+=v2*s;
cnt++;
}
}
if(s1==s2){ //两者同时到达终点
System.out.println("D"+"\n"+l/v2);
}
else if(s1>s2) { //兔子获胜
System.out.println("R "+"\n"+(l/v1+cnt*s));
}
else if (s1<s2) { //乌龟获胜
System.out.println("T"+"\n"+l/v2);
}
}
}
BASIC-25 VIP试题 回形取数
package 基础练习VIP;
import java.util.Scanner;
public class 回形取数25 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m=in.nextInt();
int n=in.nextInt();
int a[][]=new int[205][205];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
a[i][j]=in.nextInt();
}
}
int i=-1,j=0,sum=0;
//只需首次判断是否到边界,之后判断是否直走下去的数已输出过
while (sum<m*n) {
while(i<m-1&&a[i+1][j]!=-1) {//纵坐标不变,横坐标++,左侧
System.out.print(a[++i][j]+" ");
a[i][j]=-1;//标记已输出过
sum++;
}
while(j<n-1&&a[i][j+1]!=-1) {//横坐标不变,纵坐标++
System.out.print(a[i][++j]+" ");
a[i][j]=-1;
sum++;
}
while(i>0&&a[i-1][j]!=-1) {//纵坐标不变,横坐标--
System.out.print(a[--i][j]+" ");
a[i][j]=-1;
sum++;
}
while(j>0&&a[i][j-1]!=-1) {//横坐标不变,纵坐标--
System.out.print(a[i][--j]+" ");
a[i][j]=-1;
sum++;
}
}
}
}
BASIC-26 VIP试题 报时助手
package 基础练习VIP;
import java.util.Scanner;
public class 报时助手26 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int h=in.nextInt();
int m=in.nextInt();
String num[]={"zero","one","two","three","four","five","six","seven","eight","nine",
"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen",
"eighteen","nineteen","twenty"};
if(m==0) {
if(h<=20)System.out.println(num[h]+" o'clock");
else {
System.out.println("twenty "+num[h%20]+" o'clock");
}
}
else {
if(h<=20)System.out.print(num[h]+" ");
else {
System.out.print("twenty "+num[h%20]+" ");
}
if(m<=20)System.out.println(num[m]);
else if(m<30)System.out.println("twenty "+num[m%20]);
else if(m==30)System.out.println("thirty ");
else if(m<40)System.out.println("thirty "+num[m%30]);
else if(m==40)System.out.println("forty ");
else if(m<50)System.out.println("forty "+num[m%40]);
else if(m==50)System.out.println("fifty");
else if(m<60)System.out.println("fifty "+num[m%50]);
}
}
}
BASIC-28 VIP试题 Huffuman树
package 基础练习VIP;
import java.util.Arrays;
import java.util.Scanner;
public class Huffuman树28 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int a[]=new int[n];
int sum=0;
for (int i = 0; i < n; i++) {
a[i]=in.nextInt();
}
for (int i = 0; i < n-1; i++) {
Arrays.sort(a);
sum+=a[0]+a[1];
//从数组中删除最小的两个数:
a[0]=a[0]+a[1]; //令第一个元素为新数加入
a[1]=100001; //令第二个元素为一个大于之后的新数(由题:这里取100*1000+1),避免计入。相当于删去啦。
}
System.out.println(sum);
}
}
BASIC-29 VIP试题 高精度加法
package 基础练习VIP;
import java.util.Scanner;
public class 高精度加法29 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1,s2;
StringBuffer c =new StringBuffer();
s1=in.next();
s2=in.next();
char a[]=s1.toCharArray();
char b[]=s2.toCharArray();
int t,x,y;
for (int i=a.length-1,j=b.length-1,r=0;i>=0||j>=0||r>0;i--,j--){
x=i>=0?a[i]-'0':0;//防止a,b长度不同的情况,其中一个数已经取完了。
y=j>=0?b[j]-'0':0;
t=x+y+r;
r=t/10;
c=c.append(t%10);
}
System.out.println(c.reverse());//字符串颠倒
}
}
BASIC-30 VIP试题 阶乘计算
package 基础练习VIP;
import java.util.Scanner;
public class 阶乘计算30 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n=in.nextInt();
int a[]=new int[3000];
a[0]=1;
int s=0,m;
for (int i = 2; i <= n; i++) {
for (int j = 0; j < 3000; j++) {//题目提示:a乘以一个整数i变为将数组A的每一个元素都乘以i
m=a[j]*i+s;//每一位的计算
a[j]=m%10; //当前的位的数
s=m/10; //求需要进位的数
}
}
int i=2999;
while(a[i]==0){i--;};//寻找第一个不为零的项,因为后面的项都是零,数的最高位不是零,倒序寻找。
for (int j = i; j >=0; j--) {//逆向输出
System.out.print(a[j]);
}
}
}