转载

高精度算法

最近做一些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;
 }
点滴积累成就自我!努力吧!

正文到此结束
本文目录