高精度 模板
阿新 • • 發佈:2018-11-27
高精度加法
#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;
}