日期:2014-05-20  浏览次数:20782 次

java面试关于数学除法面试题两例

一,如何判断一个长字符串能否被一个数整除(注意:长字符串很长,不能转换为整数)

代码:

bool devString(const char *str, int devnum)
{
assert((str != NULL) && (devnum != 0));

int tmp = 0;
while(*str != '/0')
{
  if ((*str > '9') || (*str < '0'))
  {
   throw "Input String include invalid char!";
  }
  tmp = (tmp * 10 + (*str++ - '0')) % devnum;
}

return tmp ? false : true;
}

 

二,

代码:一个很长的字符串,不能转换为int 和long 类型的如何判断它能被7整除??

 

从头到尾每次乘10后并加上该位数,然后对7取余。

从高位一直迭代到低位(个位)并看结果是否为0。
假设s="2231",初始化p=0,
第一次千位=2,则p = (p*10+2)%7 = 2%7   = 2;
第二次百位=2,则p = (p*10+2)%7 = 22%7 = 1;
第三次十位=3,则p = (p*10+3)%7 = 13%7 = 6;
第三次个位=1,则p = (p*10+1)%7 = 61%7 = 5;
所以2231不可以整除7。
这个就是最简单的算除法的过程,自己用小学学的方法计算一遍除法看看。

bool isDevided (const char *str, int num)
{
    int tmp = 0;
    while(*str != '\0')
    {
        tmp = (tmp * 10 + (*str++ - '0')) % num;
    }
    if(tmp==0) return true;

    else return false;

}