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) 相加
}