您的位置:首页 > 其它

高精度算法

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;
}
点滴积累成就自我!努力吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: