首页 > 试题广场 >

在只容许使用++操作符的情况下,请完成下面代码,实现减法、乘

[问答题]
在只容许使用++操作符的情况下,请完成下面代码,实现减法、乘法和除法。注意:假设操作数全为正整数,并且可以不考虑性能,不能使用--,*,/等操作符。 
a). 乘法: int multi(int opl,int op2){//op1*op2} 
b). 减法: intsub(int op1,int op2){//op1-op2} 
c). 除法: int div(int op1,int op2){//op1/op2}
中心思想:
利用for循环来实现不能用其它操作符的短板
int multi(int opl,int op2)//op1*op2
{
int mu = op1 ;
for ( int i = 1 ; i < op2 ; i ++)//控制外层循环个数,也可以和op1交换位置,但是如果换了就要把mu赋值也换了,它小于op2而不是等于是因为前面mu已经被赋值一次
for ( int j = 1 ; j <= op1 ; j ++)
mu ++;
return mu ;
}
int sub(int op1,int op2)//op1-op2 假设op1>op2
intsub(in top1,int op2) {
int n=0;
for( int i=op2;i<op1;++i )  {
n++;
}
return n;
}
int div(int op1,int op2)//op1/op2
{
int di = 1;
int temp = op2 ;
while ( op1 > = op2 )//这里如果假设op2是小一点的数会更好的理解。
{
for ( int i = 0 ; i < temp ; i ++)
op2 ++;//利用自身循环和加一的特点,如果自己转完加到了temp一次,就表明满足一次,di就++一次,每次加一,然后判断op1是否等于op2,如果不等于,继续循环,如果等于,退出返回di。
di ++;
}
return di ;
}
编辑于 2015-05-19 09:21:12 回复(7)
1.先实现加法
2.乘法就是n个加法 用for循环实现
///使用++实现加法运算
int add(int op1,int op2){
    for(int i=0;i<op2;i++){
        op1++;
    }
    return op1;
}

///只使用++ 进行乘法运算 op1*op2
int multi(int op1,int op2){
    int result=0;
    for(int i=0;i<op2;i++){
        // result+op1
        result=add(result,op1);
    }
    return result;
}

///op1-op2
int sub(int op1,int op2){
    if(op1>=op2){
    for(int i=0;i<op1;i++){
        if(add(op2,i)==op1){
            return i;
        }
    }
    }else{
        for(int i=0;i<op1;i++){
            if(add(op1,i)==op2){
                return -i;
            }
        }
    }
    }

///op1/op2
int div1(int op1,int op2){
    if(op1>op2){
        for(int i=0;i<op1;i++){
            if(multi(op2,i)>op1){
                return i-1;
            }
        }
    }else{
        return 0;
    }
}

发表于 2015-05-18 18:54:26 回复(0)
int multi(int opl,int op2)
{
    int i,j;
    int result=0;
    for(i=0;i<op2;i++)
    {
        for(j=0;j<op1;j++);
                result++;
    }
    return result;
}
int sub(int op1,int op2)
{
    int i,a;
    for(i=op2,a=0;i<op1;i++,a++);
    return a;
}
int div(int op1,int op2)
{
    int i,j,a,count;
     for(i=0,count=0;count<op1;i++)
     {
            for(j=0;j<op2;j++)
                count++;
            if(count==op1)
                return ++i;
            else if(count>op1)
                return i;
     }
}

编辑于 2015-05-18 11:22:29 回复(0)
public class DoublePlus {
    public static int multi(int opt1, int opt2) {
        int sum = 0;
        for (int i = 0; i < opt1; i++) {
            for (int j = 0; j < opt2; j++) {
                sum++;
            }
        }
        return sum;
    }

    public static int sub(int opt1, int opt2) {
        int sum = 0;
        if (opt1 < opt2) {
            int temp = opt1;
            opt1 = opt2;
            opt2 = temp;
        }
        for (int i = opt2; i < opt1; i++) {
            sum++;
        }
        return sum;
    }

    public static int div(int opt1, int opt2) {
        int num = 0;
        int sum = 0;
        while (true) {
            sum = 0;
            for (int i = 0; i < opt2; i++) {
                for (int j = 0; j < num; j++) {
                    sum++;
                }
            }
            if (sum == opt1) {
                break;
            } else {
                num++;
            }
        }
        return num;
    }
    public static void main(String[] args) {
        System.out.println(div(12, 6));
    }
}
发表于 2015-06-11 12:48:29 回复(0)
    //乘法 只允许使用++(这里只针对的是正整数)
    public static int multi(int a1, int a2)
    {
        int result = 0;
        for(int i = 0; i<a1; i++)
        {
            for(int j=0; j<a2; j++ )
            {
                result++;
            }
        }
        return result;
    }
    
    // 减法 只能使用++ (这里只针对的是正整数)
    public static int sub(int a1, int a2)
    {
        int result = 0;
        if(a1 > a2)
        {
            for(int i=a2;  i<a1; i++)
            {
                result++;
            }
            return result;
        }
        else
            return 0;
    }
    
    // 除法 只能使用++ (我的计算只负责可以被整除的正整数)
    public static int div(int a1, int a2)
    {
        int result = 0;
        for(int i=1; i<=a1; i++)
        {
            if(i == a2)
            {
                result++;
                a1 = sub(a1,a2); //将值逐步减小
                i=1; //对应的遍历值也减小
            }
        }
        return result;
    }
发表于 2015-05-28 11:54:21 回复(0)
    //乘法
    int multi(int op1,int op2){
        int re=op2;
        for(int i=0;i<op1-1;i++)
            for(int j=0;j<op2;j++){
                re++;
            }
        return re;
    }
    // 减法
    int sub(int op1,int op2){
          int re=-op2;    //不知道算术运算符“-”和一元运算符“-”是不是都不能用
          for(int i=0;i<op1;i++)
              re++;
          return re;
    }
    //除法
    int div(int op1,int op2){
        int re=1;
        int tmp=op2;
        while(op1!=op2){
            for(int i=0;i<tmp;i++){
                op2++;
                if(op2==op1)return re;
            }    
            re++;
        }
        return re;
    }
发表于 2015-05-26 00:09:12 回复(0)
public static void sub(int op1,int op2){
       int j = 0;
       if(op1 > op2){
           for(int i=op2;i<op1;i++){
              j++;
           }
           System.out.println("结果为="+j);
       }else if(op2>op1){
           for(int i=op1;i<op2;i++){
              j++;
           }
           System.out.println("结果为="+-j);
       }else{
           System.out.println("结果为="+j);
       }
    }
public static void multi(int op1,int op2){
        int s = 0;
        if(op1 > 0 && op2 > 0){
            for(int i=0;i<op1;i++){
                for(int j=0;j<op2;j++){
                    s++;
                }
            }
            System.out.println("结果为="+s);
        }else if(op1 < 0 || op2 < 0){
            
            for(int i=0;i<Math.abs(op1);i++){
                for(int j=0;j<Math.abs(op2);j++){
                    s++;
                }
            }
            System.out.println("结果="+-s);
        }else{
            System.out.println("结果为="+s);
        }
    }

编辑于 2015-05-19 15:23:15 回复(0)
int multi(int opl,int op2){//op1*op2
int mu=0;
for(int i=0;i<opl;i++)
for(int k=0;k<op2;k++)
nu++;
return nu;
}


int sub(int op1,int op2){//op1-op2
int su=0;
if(op1>op2){
for(int i=op2;i<op1;i++)
su++;
return su;
}
else{
for(int i=op2;i<op1;i++)
su++;
return -su
}
}


int div(int op1,int op2) { //op1/op2
int dv=0;
int k=0;
for(int i=0;i<op1;dv++)
for(int k=0;k<op2;k++)
i++;
return dv;
}
发表于 2015-05-19 11:35:15 回复(0)
int multi(int op1, op2) {
    int res = op1;
    for(int i=1; i<op2; i++) {
        for(int j=0; j<op1; j++) {
            if(res++ > Integer.MAX_VALUE) 
                res = Integer.MAX_VALUE;
        }
    }
    return res;       
}

int sub(int op1, int op2) {
    boolean positive = true;
    if(op1 < op2)
        positive = false;
    int res = 0;
    if(!positive) {
        int tmp = op1;
        op1 = op2;
        op2 = tmp;
    }
    for(int i=op2; i<op1; i++)
        res++;
    return positive ? res : -res;
}

int div(int op1, int op2) {
    int res = 0;
    for(int i=1; i<op1; i++) {
        if(multi(++i, op2) > op1) {
            res = i;
            break;
        } 
        i = sub(i, 1);
    }
    return res;
}
        
 
编辑于 2015-05-18 21:36:10 回复(0)
/*乘法*/
int multi(int op1,int op2){
  int result =0;                              //a*b可以装换为b个a相加,故使用两层循环
  for (int i=1;i<=op1;i++){
   for(int j=1;j<=op2;j++){
    result++;
   }
  }
  
  return result;
 }
 /*减法*/
 int sub(int op1,int op2){
  int result =0;                      //a-b==c 可以转换为a==b+c,即从数b开始向后走c个数,即为数a
  if(op1>=op2){                   //为了判断两数大小,若被减数小于减数,程序找不出c,所以添加判断,
                                             //本程序目前还无法输出小于0的结果
   for(int i=op2;i<op1;i++){
    result++;
   }
  }else{
   for(int i=op1;i<op2;i++){
    result++;
   }
  }
  
  return result;
 }
 /*除法*/
 int div(int op1,int op2){
  int a=0;                                   // a/b==c可以转换为a==b*c(无余数情况),而b*c可理解为b个c相加
  int result=0;                            //所以两层循环做b*c,判断乘积==a时的c值
  for(int i=1;i<=op1;i++){
   for ( int j=1;j<=op2;j++){
     a++;
     if(a == op1){                        //由于若能整除,c整好为商,若不能整除,商为c-1
      if(j==op2){
       result=i;
      }else{
       for(int k=1;k<i;k++){          //c-1==k转换为k+1==c
        result=k;
       }
      }
      }
     }
   }
  return result;
 }

编辑于 2015-05-18 20:22:43 回复(0)
    public static int multi(int op1,int op2)
     {
        int res=0;
        for(int i=0;i<op1;i++)
            for(int j=0;j<op2;j++)
                res++;
         return res;
     }
    public static int sub(int op1,int op2)
     {
        for(int i=0;i<op2;i++)
            op1--;
         return op1;
     }
    public static int div(int op1,int op2)
     {
        int res=0;
        while(op1>0)
        {
            for(int i=0;i<op2;i++)
                op1--;
            if(op1>=0)
              res++;
        }
        return res;
     }
发表于 2015-05-18 17:38:59 回复(0)

class Solution {

public:

    int multi(int op1,int op2) {

        int cnt=0;

        for(int i=0;i<op1;i++) {

            for(int j=0;j<op2;j++) {

                cnt++;

            }

        }

        return cnt;

    }

    int sub(int op1,int op2) {

        int cnt=0;

        for(int i=op2;i<op1;i++) {

            cnt++;

        }

        return cnt;

    }

    int div(int op1,int op2) {

        int cnt=0;

        int i,j;

        i=j=0;

        while(i<op1) {

            if(j==op2) {

                cnt++;

                j=0;

            }

            i++;

            j++;

        }

        return cnt;

    }

};


发表于 2015-05-18 13:42:18 回复(0)
int multi(int opl,int op2) {
    int s = 0;
    for ( int i=0;i<op1;++i ) {
        for ( int j=0;j<op2;++j ) {
            ++s;
        }
    }
    return s;
}

int sub(int op1,int op2) {
    int j=0;
    for ( int i=op2;i<op1;++i )  {
        ++j;
    }
    return j;
}

int div(int op1,int op2) {
    int s = 0;
    int i=0,j=0;
    while(i<op1) {
        if ( j==op2 ) {
            ++s;
            j = 0;
        }
        ++i;
        ++j
    }
    return s;
}



发表于 2015-05-18 10:40:00 回复(0)