1 .请编写一个方法,实现整数的乘法、减法和除法运算(这里的除指整除)。只允许使用加号。
}
给定两个正整数int a,int b,同时给定一个inttype代表运算的类型,1为求a * b,0为求a / b,-1为求a - b。请返回计算的结果,保证数据合法且结果一定在int范围内。
//注意点: 正整数a ,b 只能用加号 实现乘除减等运算
//我减法没想出来 !
public int calc(int a,int b,int type){
int result=0;
if(type==1){ // 乘法 b个a 相加
int tmp=0;
for(int i=0;i<b;i++){
tmp+=a;
}
result=tmp;
}else if(type==0){ // 整除 a=a-b不断减 统计count
int tmp=a;
int count=0;
while(tmp>0 && tmp>=b){
tmp=tmp+(~b)+1; //内存中存储的都是补码 负数的补码就是 原码取反 加1
count++;
}
result=count;
}else{
result=a+(~b)+1; //a-b 位取反符号~
}
return result;
}
//法2: 思路:乘法 转为加法 除法 转为 乘法(找i) 减法 转为 加法
//注意: 减法中 a-b=x 则a=b+x; 若a<b, 则x+a=b ,则b-a=(-1)* x 即x个 (-1) 相加
import java.util.*;
public class AddSubstitution{
public int calc(int a,int b,int type){
int r=0;
switch(type){
case 1: r=multi(a,b) ;break;
case 0:r=div(a,b); break;
case -1: r=sub(a,b); break;
}
return r;
}
//乘法
public int multi(int a,int b){
int r=0;
for(int i=0;i<a;i++){
r+=b;
}
return r;
}
//除法
public int div(int a,int b){
for(int i=1; i<=a;i++) //i从1开始
if(multi(b,i) <=a && multi(b,i+1)>a) //限定条件去找i
return i;
return 0; 直接整除为0
}
//减法
public int sub(int a,int b){
if(a>b)
for(int i=0;i<a;i++)
if(b+1==a){
return i;
return multi(sub(b,a),-1); //假如a<b 则值为负数 //若a<b, 则x+a=b ,则b-a=(-1)* x 即x个 (-1) 相加
}
本文介绍了一种仅使用加法实现整数乘法、除法和减法的方法。通过巧妙地利用循环和位操作,实现了不同类型的算术运算。文章提供了两种实现方式,并附带了详细的代码示例。

被折叠的 条评论
为什么被折叠?



