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;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值