高精度算法

  1. 高精度加法

  算法核心:

  

c[i]+=a[i]+b[i];
c[i+1]=c[i]/10; //进位到后一位;
c[i]=c[i]%10  //一个位上不会出现大于等于10的数,大于等于10的部分已经进到后一位

#include<bits/stdc++.h>
using namespace std;
  char s1[505],s2[505]; //¿É¼ÆËã10µÄ500´Î·½      
  int a[505],b[505],c[505];
 int main(){
   int lena,lenb,lenc;
   cin>>s1>>s2;
   lena=strlen(s1);
   lenb=strlen(s2);
   for(int i=0;i<lena;i++){
      a[lena-i]=s1[i]-'0';   //½«×Ö·ûת»¯ÎªÊý×Ö£¬²¢ÇÒתÖÃ
    } 
  for(int i=0;i<lenb;i++){
    b[lenb-i]=s2[i]-'0';
    }
  lenc=max(lena,lenb)+1;
  for(int i=1;i<=lenc;i++){
    c[i]+=a[i]+b[i];
    c[i+1]=c[i]/10;
    c[i]=c[i]%10;
        }
  if(c[lenc]==0&&lenc>0) lenc--;//ɾ³ýÇ°µ¼0
  for(int i=lenc;i>0;i--){
    cout<<c[i];  //µ¹ÖÃÊä³ö
    }
}

  1. 高精度乘法

#include<bits/stdc++.h>
using namespace std;

char s1[2005],s2[2005];
int a[2005],b[2005],c[2005];

int main(){
	int lena,lenb,lenc;
	cin>>s1>>s2;
	lena=strlen(s1);
	lenb=strlen(s2);
	for(int i=0;i<lena;i++){
		a[lena-i]=s1[i]-'0';
	}
	for(int i=0;i<lenb;i++){
		b[lenb-i]=s2[i]-'0';
	}
	lenc=lena+lenb;
	for(int i=1;i<=lena;i++){
		for(int j=1;j<=lenb;j++){
			c[i+j-1]+=a[i]*b[j];
			c[i+j]+=c[i+j-1]/10;
			c[i+j-1]%=10;
		}
	}
	while(c[lenc]==0&&lenc>0) lenc--;
	for(int i=lenc;i>0;i--){
		cout<<c[i];
	}
	return 0;
}
#include<bits/stdc++.h>
using namespace std;

int n,a[101]={0},s[101]={0};
void change(int x)     //¸ß¾«¶ÈÇóij¸öÊýµÄ½×³Ë£¬²¢´æ·ÅÔÚÊý×é 
{
    int g=0;
    for(int i=100;i>=0;i--)
    {
        a[i]=a[i]*x+g;
        g=a[i]/10;
        a[i]=a[i]%10;
    }
}
void qh()       //¸ß¾«¶ÈÇóºÍ 
{
    int g=0;
    for(int i=100;i>=0;i--)
    {
        s[i]=s[i]+a[i]+g;
        g=s[i]/10;
        s[i]=s[i]%10;
    }
}
void sc()
{
    int w;
    for(int i=0;i<=100;i++)
    {
        if(s[i]!=0)
        {
            w=i;
            break;
        }
    }
    for(int i=w;i<=100;i++)
        printf("%d",s[i]);
}
int main()
{
    scanf("%d",&n);
    s[100]=a[100]=1;
    for(int i=2;i<=n;i++)
    {
        change(i);
        qh();
    }
    sc();
    return 0;
}

 

 

 

posted @ 2023-07-11 10:34  osir  阅读(20)  评论(0编辑  收藏  举报