【第二章】

1、问题一:输入两个数字,只识别两位数相加和两位数输出。问题二:输入两个数字,>=9位,两位数相加有多少进位

package acm;
//1、输入两个数字,只识别两位数相加和两位数输出
import java.util.Scanner;

public class 第二章19视频1 {
    
    
	
	
//?1、答:	public static void main(String[] args)
//	{
    
    
//		int a=0,b=0;
//	Scanner sc=new Scanner(System.in);
//	while(sc.hasNext()) {
    
    
//		a=sc.nextInt();
//		b=sc.nextInt();
//		System.out.println(((a%100)+(b%100))%100);	
//	}
//?	}
	
	
	
	//输入两个数字,>=9位,两位数相加有多少进位
//每次模拟加法,个位对齐,百位对百位,十位对十位,
	public static void main(String[] args)
	{
    
    
		int a=0,b=0;
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()) {
    
    
			a=sc.nextInt();
			b=sc.nextInt();
			if(a==0 && b==0) break;
			int count=0,jw=0;//count记录共有多少次进位,jw用来存放上一次是否需要进位
			for(int i=0;i<=9;i++)
			{
    
    
				jw=(a%10+b%10+jw)>=10?1:0;
				count+=jw;
				a=a/10;
				b=b/10;
			}
			System.out.println(count);
			
		}
	}
	
}


2、最大公约数

//约数是如果一个整数能被两个整数整除,那么这两个数就是这个数的约数。 约数是有限的,一般用最大公约数。 直白地说,
//约数就是能将其整除的除数。 整数a除以整数b (b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。
//质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。1 3 5 7
//因数定义. 在 小学数学里,两个正整数相乘,那么这两个数都叫做 积 的因数,或称为 约数 。

package acm;

import java.util.Scanner;

//约数是如果一个整数能被两个整数整除,那么这两个数就是这个数的约数。 约数是有限的,一般用最大公约数。 直白地说,
//约数就是能将其整除的除数。 整数a除以整数b (b≠0) 除得的商正好是整数而没有余数,我们就说a能被b整除,或b能整除a。
//质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。1 3 5 7
//因数定义. 在 小学数学里,两个正整数相乘,那么这两个数都叫做 积 的因数,或称为 约数 。
public class 第二章20最大公约数 {
    
    
	public static void main(String[] args)
	{
    
    
		int a=0,b=0;
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
    
    
			a=sc.nextInt();
			b=sc.nextInt();
			System.out.println("欧几里得"+gcd1(a,b));
			System.out.println("递归"+gcd(a,b));
		}
		
	}
	//求a,b的最大公约数,对比a,b,大数取余小数===大方块里取一个小方快,再从小方块取小小方块
	public static int gcd(int a,int b) {
    
    
		return b==0?a:gcd(b,a%b); //如果b==0,最大公约数为a
	}
	 
	public static int gcd1(int a,int b)
	{
    
    
		while(b>0) {
    
    
			int t=a%b;
			a=b;
			b=t; //gcd(a,b)=>gcd(b.a%b)
		}
		return a;
	}

}

3、大整数加法

//常规高精度+ - * 除
//大整数的加法模拟
//输入a,b 反转a,b 使得个位对个位 、十位对十位
//for(开头 结尾) 然后从左往右加,逢十进一
//输出倒着打印

package acm;

import java.util.Scanner;

//常规高精度+ - * 除
//大整数的加法模拟
//输入a,b 反转a,b  使得个位对个位 、十位对十位 
//for(开头    结尾)      然后从左往右加,逢十进一
//输出倒着打印
public class 第二章大整数加法 {
    
    

	public static void main(String[] args) {
    
    
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())//从键盘输入
		{
    
    
			String a=sc.next();
			String b=sc.next();
			int len=Math.max(a.length(), b.length());
			String ans="";//存放模拟相加的结果
			String ans1="";
			
			//ab两个加数翻转,这样个位在左,能对齐
			a=new StringBuffer(a).reverse().toString();
			//把a 传入StringBuffer()构造函数里,得到StringBuffer()的对象
			b=new StringBuffer(b).reverse().toString();
			
			//开始模拟进位 此时个位对齐
			int jw=0;//开始的时候进位是0(从低位到高位的进位)
			for(int i=0;i<=len;i++)
			{
    
    
				int ai=i<a.length()?a.charAt(i)-'0':0;//? : 当a,b的长度不同时,需要打这个补丁
				int bi=i<b.length()?b.charAt(i)-'0':0;
				int num=ai+bi+jw;//结果 两数相加,再加上前面的进位
				//取个位 当前这一位应该留下的 合并字符串
				//ans=ans+num%10;
				ans1=num%10+ans1;
				jw=num/10;//锋十进一 应该往上面进位的
				
				//System.out.println(ans);
				
				//System.out.println(ans1);
			}
			//if(jw==1)ans="1"+ans;
			System.out.println(ans1);
			
		}
		

	}

}

4、进制

//输入一个数a(默认为十进制),将a的十进制、十六进制、十二进制 数字相加都相等,则a为天空数
//例如2992 四位数之和22;
//2992的十二进制为1894 四位数之和22;
//2992的十六进制为BB0 数子之和为11+11+0=22
//所以2992是天空数

package acm;

import java.util.Scanner;
//输入一个数a(默认为十进制),将a的十进制、十六进制、十二进制  数字相加都相等,则a为天空数
//例如2992 四位数之和22;
//2992的十二进制为1894 四位数之和22;
//2992的十六进制为BB0   数子之和为11+11+0=22 
//所以2992是天空数
public class 第二章进制 {
    
    
	public static void main(String[] args)
	{
    
    
		int a=0;//定义两个整形变量用来存储 到时候读入整数a b
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
    
    
			a=sc.nextInt();
			if(getRsum(a,10)==getRsum(a,12)&&  getRsum(a,12)==getRsum(a,12))
				System.out.println("是天空数");
			else
				System.out.println("no");
			
		}
		
	}
	public static int getRsum(int n,int r)
	{
    
    
		int sum=0;
		while(n>0)
		{
    
    
			sum+=n%r;
			n=n/r;
		}
		return sum;
	}

}

5、打印一个集合的全部子集 进制二

package acm;
//打印一个集合的全部子集
public class 第二章进制1 {
    
    
	public static void main(String[] args)
	{
    
    
		int[] a= {
    
    1,2,3,4};
		for(int i=0;i<15;i++)
		{
    
    
			System.out.print("{");
			int n=i;//存储当前要去转换成二进制的i
			int index=0;//当前是第几次去除以2
			while(n>0)//只要n>0,就不断的除2取余
			{
    
    
				if(n%2==1)// 15%2=1 集合的第一个数字打印
					      // 15/2=7 7%2=1 集合的第二个数字打印
					      // 7/2=3 3%2=1  集合的第三个数字打印
					      // 3/2=1 1%2=1 集合的第四个数字打印
				{
    
    
					if(n>2)
						System.out.print(a[index]+" ");
					else
						System.out.print(a[index]);
				}
				index++;
				n=n/2;//不断缩小为原来的二分之一
			}
			System.out.println("}");
		}
	}

}

6、位运算

//输入一个数n,判断n=2的x次方 是—yes 不是—no
//n转换为二进制,1打头后面全为0


	public static void main(String[] args)
	{
    
    
		int a=0;
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
    
    
			a=sc.nextInt();
			System.out.println((a&(a-1))==0?"yes":"no");
		}
	}

//输入一个数a,判断a的二进制中有几个1


	public static void main(String[] args)
	{
    
    
		int a=0;
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())//循环读入若干组测试数据
		{
    
    
			a=sc.nextInt();
			int count=0;//统计a的二进制中1的个数
			while(a>0)
			{
    
    
				a=a&(a-1);//做一次,就把a的最右边的1置为0
				//在计算器内数字为二进制
				count++;
			}
			System.out.println(count);
		}
	}

//输入n~2n-1的整数,找出只出现1次的那个数
//异或方法
//x^x=0 0^x=x abc=acb
//案例:
// 4
// 1 2 3 2 1 4 4
//
// 01122443==03==3


	public static void main(String[] args)
	{
    
    
		int n=0,ans=0;//存放读入几个数
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())//循环读入若干组测试数据
		{
    
    
			n=sc.nextInt();//知道要读入多少个数
			ans=0;
			for(int i=0;i<2*n-1;i++)
			{
    
    
				ans=ans^sc.nextInt();
				
			}
			System.out.println(ans);
		}
	}

//输入两个数 a,b a=17 b=25
//翻转两个数 a=71 b=52
//a0=7 a1=1 b0=5 b1=2
//a[0]*b[0]=35
//a[0]*b[1]=14 C[0]=35 C[1]=14+5 C[2]=2
//a[1]*b[0]=5 35 19 2
//a[1]*b[1]=2 向右锋十进一 取余 5 2 4 最后载翻转425

for(a[0]~~a[n])
	for(b[0]~~b[n])
		a[i]*b[j]====c[i+j]		
for(c[0]~~c[n])
package acm;

import java.util.Arrays;
import java.util.Scanner;


public class 第二章位运算 {
    
    

	public static void main(String[] args)
	{
    
    
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext())
		{
    
    
			String a=sc.next();
			String b=sc.next();
			int[] c=new int[a.length()+b.length()];
			//ab两个数翻转,个位在左可以对齐
			a=new StringBuffer(a).reverse().toString();
			b=new StringBuffer(b).reverse().toString();
			for(int i=0;i<a.length();i++)
			{
    
    
				int ai=a.charAt(i)-'0';
				for(int j=0;j<b.length();j++)
				{
    
    
					int bj=b.charAt(j)-'0';
					c[i+j]=c[i+j]+ai*bj;
					
				}
			}
			System.out.println(Arrays.toString(c));
			
			for(int i=0;i<c.length-1;i++)
			{
    
    
				int jw=c[i]/10;//算出进位
				c[i]=c[i]%10;//取个位数
				c[i+1]+=jw;//后一位进位后的数
			}
			System.out.println(Arrays.toString(c));
			int pos=c.length;
			while(c[--pos]==0);//去除数组最后的0
			
			while(pos>=0)
				System.out.print(c[pos--]);
		}
	}

}

7、第几天

package acm;

import java.util.Calendar;

public class 第几天 {
    
    
public static void main(String[] args){
    
    
	Calendar calendar1=Calendar.getInstance();
	calendar1.set(2000, 0,1);
	Calendar calendar2=Calendar.getInstance();
	calendar2.set(2000,4,4);
	//xxxx年 calendar2-开始的那一年 经历的毫秒数
	//System.out.println((calendar2.getTimeInMillis()-calendar1.getTimeInMillis())/1000/60/60/24);
	System.out.println(calendar2.get(Calendar.DAY_OF_YEAR));
	
}

}

猜你喜欢

转载自blog.csdn.net/m0_53524766/article/details/131382334