1. 程式人生 > >高精度 模板

高精度 模板

高精度加法

#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; }