版权声明: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;
}