社区
其它技术问题
帖子详情
如何高效求余数?
Googol
2005-02-04 02:15:34
面试题,只有+ - *和移位运算,如何计算一个数除3的余数?要求效率。
一次次减3的算法效率低。
好像和循环链表有关,哪位dx能帮忙想个算法?
...全文
392
10
打赏
收藏
如何高效求余数?
面试题,只有+ - *和移位运算,如何计算一个数除3的余数?要求效率。 一次次减3的算法效率低。 好像和循环链表有关,哪位dx能帮忙想个算法?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
goodluckyxl
2005-02-04
打赏
举报
回复
所有位数相加和
和 - 和/3
kobefly
2005-02-04
打赏
举报
回复
1.把这个数各位数字相加得到a。
2.若a>3 转 1
3.直接输出a
比如14
1 1 + 4 = 5;
2 a = 5 >3
1 5
2 a = 5;
..................
是这样吗?
yjh1982
2005-02-04
打赏
举报
回复
1.把这个数各位数字相加得到a。
2.若a>3 转 1
3.直接输出a
这个,能保证正确么?
pcboyxhy
2005-02-04
打赏
举报
回复
一个人回复了这么多
实在抱歉
pcboyxhy008
2005-02-04
打赏
举报
回复
原来关系运算符也不可以
如果下标运算也不可以
wk
csdn一个ID不能在一个问题下连续回复3篇,
只好换mj出来了。
循环链表的话就要用指针了
不知道 -> 和 .能不能用。
=是赋值运算符
不知道可以用不?
要是不能用=
我就不会做了。
此外还有[ ]运算符,
要是这个都不能用
只好手工判断了
反正只剩下几个而已
==运算符也是可以转换的
不再赘述
有没有想过能表示所有C运算符的极大线性无关组,并要求这个子集的模最小
谁有兴趣可以研究研究
贴出来给大家看看
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
long n, p, q, i;
int yushu[]={1, 2};
int yu[ ]={0,1,2,0};
cin>>n;
while(n>3)
{
i=0; q=0;
while(n)
{
p=i; p>>=1; p<<=1;
i=i-p;
p=n; p>>=1; p<<=1;
q+=(n-p)*yushu[i++];
n>>=1;
}
n=q;
}
cout<<endl<<yu[n];
system("PAUSE");
return 0;
}
Googol
2005-02-04
打赏
举报
回复
pcboyxhy,多谢你这么热心啊,不过你得第一种算法有取巧之嫌吧?
受你第二种算法的启发,改进了一下。不知道效率有没有提高,至少空间上效率高了。
#include <stdio.h>
main()
{
int n;
scanf("%d", &n);
int mo[]={0,1,2,0};
int i, m;
m = n;
i = 4;
while (i>3){
i = 0;
while(m>0)
{
i += m & 3;
m >>= 2;
}
m = i;
}
printf("%d", mo[i]);
}
pcboyxhy
2005-02-04
打赏
举报
回复
1.把这个数各位数字相加得到a。
2.若a>3 转 1
3.直接输出a
这个,能保证正确么?
~~~~~~~~~~~~
没看我代码吗?
我弄错了
是9,不是3
你们可以拿代码测试一下就知道了
pcboyxhy
2005-02-04
打赏
举报
回复
如果不能使用 &运算
可以这样替换
a&0x1 <==> {b=a; a>>1; a<<1;} 取a!=b
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
long n, p, q, i;
int yushu[]={1, 2};
int yu[ ]={0,1,2,0};
cin>>n;
while(n>3)
{
i=0; q=0;
while(n)
{
p=i; p>>=1; p<<=1;
i=i!=p;
p=n; p>>=1; p<<=1;
q+=(n!=p)*yushu[i++];
n>>=1;
}
n=q;
}
cout<<endl<<yu[n];
system("PAUSE");
return 0;
}
pcboyxhy
2005-02-04
打赏
举报
回复
还有一种做法就是:
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
long n, p, q, i;
int yushu[]={1, 2};
int yu[ ]={0,1,2,0};
cin>>n;
while(n>3)
{
i=0; q=0;
while(n)
{
i&=0x1;
q+=(n&0x1)*yushu[i++];
n>>=1;
}
n=q;
}
cout<<endl<<yu[n];
system("PAUSE");
return 0;
}
以上两种解法均没有考虑负数和整数越界
pcboyxhy
2005-02-04
打赏
举报
回复
1.把这个数各位数字相加得到a。
2.若a>3 转 1
3.直接输出a
如下
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char *argv[])
{
long n, p;
int yushu[ ]={0,1,2,0,1,2,0,1,2,0};
cin>>n;
while(n>9)
{
long p=0, t;
while(n)
{
t=long(n*0.1);
p+=n-t*10;
n=t;
}
n=p;
}
cout<<endl<<yushu[n];
system("PAUSE");
return 0;
}
高效
的
求余
数
的办法((n-1)&hash)
本文详细解析了Java HashMap源码中(n-1)&hash运算的
高效
求余
数
方法及其背后的原理,通过具体例子阐述了为什么这种方法仅适用于除
数
为2的幂的情况。
大整
数
求余
数
的问题分析
本文深入探讨了大整
数
求余
数
问题的解决方案,包括指
数
求余
和大整
数
求模运算。通过引入模运算的性质,提出了一种O(N)复杂度的迭代方法和对
数
级别的递归方法,有效降低了计算复杂度。同时,对于长整
数
求模,采用多项式求和方式简化计算过程。本文旨在提供实用且
高效
的算法,解决大整
数
运算中的挑战。
acm-
求余
数
(同余定理)
本文探讨ACM竞赛中常见的
求余
数
问题,结合同余定理进行解析,阐述如何
高效
地进行模运算处理。
求余
数
本文介绍了一种解决大
数
除法
求余
数
问题的方法,通过Java实现,能够
高效
处理位
数
不超过一百万的自然
数
n除以10003后的余
数
运算。
求任意整
数
模3的余
数
本文介绍了一种求模3余
数
的
高效
算法,通过累加
数
字各位并重复此过程,直至得到一位
数
,其结果即为原
数
模3的余
数
。此算法适用于正负
数
,且与
数
的进制有关,9及其约
数
和倍
数
具有特殊性质。
其它技术问题
3,881
社区成员
9,044
社区内容
发帖
与我相关
我的任务
其它技术问题
C/C++ 其它技术问题
复制链接
扫一扫
分享
社区描述
C/C++ 其它技术问题
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章