NianSir小站很久不水文章了,寻思最近学习Java,有很多比较有意思的算法题可以练练思维,就果断开始制定自己的刷题计划,同时也可以水一点文章发发博客就顺便用博客的Java专题记录一下子咯。
    温馨提示:NianSir的代码Java水平可能很一般,如果有更好的建议欢迎各位dalao指点指点
    下面就来分享一下今天带来的第一个Java算法题——“新除法”

Java算法题A-01 - “新除法”

    顾名思义,作为“新除法”,那肯定是与传统的除法不同,要求我们不使用‘%’、‘/’运算符进行商和余数的运算(所有数据均为整数类型),很明显这类算法的实现并不复杂,并不需要深度的Java知识也能够完成,那直接开整吧!

#1 算法设计

    对于传统的÷,假设a为除数,b为被除数,我们可以理解为a中最多包含b的n倍,剩余的a-n*b即为余数,那么我们不妨直接使用循环结构对a-b进行循环操作,直至a-b不小于0为止,其中循环次数即为n,a-n*b就是余数啦,我们可以在循环结构里加入一个计数器得到n的数值。
    当然细心一点不难发现,这个逻辑是在a>b的情况下成立的,当a小于b时,b应该直接为余数,而不需要循环判断,所以我们只需要在设定好的循环结构外层加一个if判断即可,先进行判断,再进行循环,最后print输出结果即可。

#2 代码

a、b为除数与被除数,shang存储商、yu存储余数,Java代码如下
package day1_4_22;
import java.util.Scanner;
public class XinChuFa1 {
	public static void main(String[] args) {
		// 新除法-算法题 给定两个整数不使用/、%进行计算取商和余数
		/*
		 * 作者:NianSir
		 * 时间:2023-4-22
		 * */
		int a,b,n1,n2,shang=0,yu,i=0;
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入除数与被除数(整数):");
		n1=a=sc.nextInt();
		n2=b=sc.nextInt();
		if(a-b<0) {
			shang=0;yu=a;
			System.out.println(a+"÷"+b+" = "+shang+"···"+yu);
		}else {
			for(i=0;n1-n2>=0;i++) {
				n1-=n2;
			}
			yu=n1;shang=i;
			System.out.println(a+"÷"+b+" = "+shang+"···"+yu);
		}
	}

}

#3 运行结果

     当a大于b时:
a大于b情况下的运行结果
    当a小于b时:
当a小于b情况下的运行结果
    如有更好的思路欢迎各位留言交流(*^▽^*)