高精度 模板

版权声明:https://blog.csdn.net/huashuimu2003 https://blog.csdn.net/huashuimu2003/article/details/84535704

高精度加法

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int __=1000100;	
char a1[__],b1[__];
int a[__],b[__],c[__];
int a1len,b1len,lenc,i,x;
int main()
{
	memset(a,0,sizeof(a)); 
	memset(b,0,sizeof(b)); 
	memset(c,0,sizeof(c));
	
	gets(a1); 
	gets(b1); //输入加数与被加数 
	 
	a1len=strlen(a1); 
	b1len=strlen(b1); 
 
	for (i=0;i<=a1len-1;i++) 
		a[a1len-i]=a1[i]-48; //将操作数放入a数组  
	 
	for (i=0;i<=b1len-1;i++)
		b[b1len-i]=b1[i]-48; //将操作数放入b数组 
 
    lenc = 1; 
	x=0; 
	
   while(lenc <= a1len || lenc <= b1len) 
   { 
		c[lenc]=a[lenc]+b[lenc]+x; //两数相加  
		x=c[lenc]/10;	//要进的位
		c[lenc]=c[lenc]%10;		//进位后的数
		lenc++;		//数组下标加1
	}
	
	c[lenc]=x;
	if (c[lenc]==0) lenc--; //处理最高进位 
	
	for (i=lenc;i>=1;i--)
		cout<<c[i]; //输出结果 	
	cout<<endl;
	return 0;
}

给定一个n,求n的阶乘。

#include <iostream>
#include <cstring>
using namespace std;
const int maxn=3000;
int f[maxn];
int main()
{    
    int i,j,n;    
    cin>>n;    
    memset(f,0,sizeof(f));   
    f[0]=1;    
    for (i=2;i<=n;i++)    
    {        
        int c=0;        
        for (j=0;j<maxn;j++)        
        {            
            int s=f[j]*i+c;            
            f[j]=s%10;           
            c=s/10;        
        }    
    }    
    for (j=maxn-1;j>=0;j--)        
    if(f[j])   break;    
    for (i=j;i>=0;i--)  cout<<f[i];
    return 0;
}

猜你喜欢

转载自blog.csdn.net/huashuimu2003/article/details/84535704