高精度算法
2016-05-16 23:48
162 查看
最近做一些acm题,题目所给的数据范围都很大,难以用c语言中的普通数据类型比如int,long等表示出来,所以就用了高精度算法
下面的程序是计算两个超大的数据相乘的结果,引用字符串来表示相应的整数
加法,减法,除法类似,我就不一一列举,自己琢磨,或许是更好的学习方法!
下面的程序是计算两个超大的数据相乘的结果,引用字符串来表示相应的整数
加法,减法,除法类似,我就不一一列举,自己琢磨,或许是更好的学习方法!
#include<iostream> using namespace std; #include<cstdio> #include<cstring> int main() { char s1[100],s2[100]; int a[100],b[100],c[100]; memset(a,0,sizeof(a));//开始数组全部设置为0 memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); cin>>s1>>s2; //输入a,b两个超大整数的字符串; int lena,lenb,lenc; lena=strlen(s1); lenb=strlen(s2); int i,j; for(i=0;i<lena;i++) a[lena-i-1]=s1[i]-48;//把整数字符串倒转过来赋值给相应数组 for(i=0;i<lenb;i++) b[lenb-i-1]=s2[i]-48; int x; //用它来储存进位 for(i=0;i<lena;i++) { x=0; for(j=0;j<lenb;j++) { c[i+j]=a[i]*b[j]+x+c[i+j];//加上原数和进位 x=c[i+j]/10; c[i+j]%=10; } c[i+lena]=x; //把最高位进位赋值进c } lenc=lena+lenb; if(c[lenc-1]==0) lenc--; //如果c数组前导为零,把零删去 for(i=lenc-1;i>=0;i--) //把结果打印出来 cout<<c[i]; cout<<endl; }点滴积累成就自我!努力吧!
相关文章推荐
- (八)Hibernate 映射关系
- 巧用绝对定位解决手机端文本框聚焦fixed定位失效
- 怎么把人物图P到表情图并且做成动图~
- 《算法》第四版《Algorithms》4th Edition 学习环境搭建
- STM8L151 在IAR中实现Flash/EEPROM的擦写
- 欢迎使用CSDN-markdown编辑器
- 展开与收起效果
- 栈的链接存储——链栈
- pythonchallenge 解谜 Level 1
- 你不努力,谁也给不了你想要的生活
- 单元测试练习
- Using AngularJS with .NET MVC 5
- HTML5标签绘制渐变图形的一些总结
- 2006浙大火星A+B
- projectne10向ZedBoard移植
- 使用win2d实现萤火虫粒子效果
- http://www.doc88.com/p-7374285513754.html
- Android Studio 常用快捷键
- Add Two Numbers
- hdu_2224_The shortest path(dp)