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;
}