同余定理求大整数余数
来源:互联网 发布:鹏业软件青海 编辑:程序博客网 时间:2024/04/30 01:43
1.同余定理:(a+b)%c=((a%c)+(b%c))%c
m%n举例:
123 % n =(((1%n*10%n+2%n)%n*10%n)%n+3%n)%n
利用这个性质我们可以将大整数按位分解存入数组,然后循环求出最终余数。
其中求余函数如下:
int div(string a,int b){ int num[1000],i,la; la=a.length(); string::iterator t=a.begin();//迭代器,像指针一样指向字符串头 for(i=0;i<a.length();i++) num[i]=*(t+i)-48; //将被除数a从字符串转换到数组中 int m=0; for(i=0;i<la;i++) { m=(10*m%b+num[i]%b)%b;//同余定理 } return m;}
测试函数如下
int main(){ string a; int num[100]; int b,m,i; cin>>a>>b; m=div(a,b); cout<<m<<endl; return 0;}小结:
简单的看了一下迭代器的使用,迭代器就像指针样字符串迭代器定义:
string a;
#string::iterator tb=a.begin();//此迭代器指向a的第一个元素
#string::iterator te=a.end()-1;//此迭代器指向a最后一个元素,注意,a.end()并不是指向最后一个元素;
#删除函数erase的三种用法:
(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器)
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)
#还有个append()函数,是向字符串后面接字符串的。一个小问题,纠结了我一下午,怎样删除string中特定字符。
因为开始不知道string可以用下标遍历,所以认为只能用迭代器。而迭代器有个问题要注意,用erase删除一个元素后,字符串长度也会减1,迭代器指向的下标相当于没变。
代码如下:
string a; cin>>a; string::iterator pa=a.begin(); for(pa=a.begin();pa!=a.end();) { if(*pa=='1') a.erase(pa); else { pa++; } } cout<<a<<endl;
0 0
- 同余定理求大整数余数
- 利用同余定理求大整数余数(acm练习)
- 求余数(同余定理)
- acm-求余数(同余定理)
- *求余数(同余定理)~*
- 同余定理(求余数)
- NYOJ 205 求余数 (大数求余 & 同余定理 )
- NYOJ 105 九的余数 (大数求余&同余定理)
- 同余定理 应用于大整数取模
- 【杭电-oj】-1212-Big Number(同余定理求余数)
- hdu1163Eddy's digital Roots(九余数定理+同余定理)
- 大整数的求余数
- 求大整数的余数
- NYOJ 105 九的余数【同余定理】
- c语言之同余定理的应用求2001的2003次方除以13的余数
- c语言同余定理的应用:三个大数除以m得到相同的余数,求m最大的数值
- 次方求模&同余定理
- 同余定理两大基本应用
- Linux进程间通信——使用共享内存
- 1.INSERT INTO SELECT语句
- java创建文件和目录
- 学习笔记8--bootstrap:布局组件之“下拉菜单”
- 回归分析
- 同余定理求大整数余数
- Android TextClock获取系统时间,格式跟随设置改变
- Win32 SDK中窗口全屏处理 用window api实现程序全屏显示
- 关于Android sdk安装出现的 Failed to fectch URl问题
- windows SEH机制注释(2) 基于ReactOS
- RDIFramework.NET ━ .NET快速信息化系统开发框架 ━ 工作流程组件Web业务平台
- lua学习之weak表
- PullZoomView
- c# mysql blob(2) 实现突破存储与保存