NianSir小站很久不水文章了,寻思最近学习Java,有很多比较有意思的算法题可以练练思维,就果断开始制定自己的刷题计划,同时也可以水一点文章发发博客就顺便用博客的Java专题记录一下子咯。
温馨提示:NianSir的代码Java水平可能很一般,如果有更好的建议欢迎各位dalao指点指点
下面就来分享一下今天带来的第一个Java算法题——“新除法”
Java算法题A-01 - “新除法”
顾名思义,作为“新除法”,那肯定是与传统的除法不同,要求我们不使用‘%’、‘/’运算符进行商和余数的运算(所有数据均为整数类型),很明显这类算法的实现并不复杂,并不需要深度的Java知识也能够完成,那直接开整吧!
#1 算法设计
对于传统的÷,假设a为除数,b为被除数,我们可以理解为a中最多包含b的n倍,剩余的a-nb即为余数,那么我们不妨直接使用循环结构对a-b进行循环操作,直至a-b不小于0为止,其中循环次数即为n,a-nb就是余数啦,我们可以在循环结构里加入一个计数器得到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时:
如有更好的思路欢迎各位留言交流(^▽^)
评论 (0)