- 两非负数相加
#include<bits/stdc++.h>
using namespace std;
char ch1[20005],ch2[20005];
int len1,len2,len,jw;
int f1[20005],f2[20005],f[50000];
int main()
{
cin>>ch1;
len1=strlen(ch1);
cin>>ch2;
len2=strlen(ch2);
for(int i=0;i<len1;i++)
f1[len1-i]=ch1[i]-'0';
for(int i=0;i<len2;i++)
f2[len2-i]=ch2[i]-'0';
len=max(len1,len2)+1;
for(int i=0;i<=len;i++)
{
f[i]=(f1[i]+f2[i]+jw)%10;
jw=(f1[i]+f2[i]+jw)/10;
}
while(f[len]==0&&len>1)
len--;
for(int i=len;i>=1;i--)
printf("%d",f[i]);
return 0;
}
参考自:高精度加法(原理+代码)
- 两数相乘
#include<bits/stdc++.h>
using namespace std;
char ch1[20005],ch2[20005];
int len1,len2,len;
int f1[20005],f2[20005],f[50000];
int main()
{
cin>>ch1;
len1=strlen(ch1);
cin>>ch2;
len2=strlen(ch2);
len=len1+len2-1;
for(int i=0;i<len1;i++)
f1[len1-i]=ch1[i]-'0';
for(int i=0;i<len2;i++)
f2[len2-i]=ch2[i]-'0';
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++)
f[i+j-1]+=f1[i]*f2[j];
for(int i=1;i<=len;i++)
{
f[i+1]+=f[i]/10;
f[i]=f[i]%10;
}
//最高位相乘进位的情况
if(f[len+1])
len++;
//特殊情况,和0相乘
while(f[len]==0&&len>1)
len--;
for(int i=len;i>=1;i--)
printf("%d",f[i]);
return 0;
}
参考自:高精度乘法
- 阶乘之和
#include<bits/stdc++.h>
using namespace std;
int n,a[1001],b[1001],cnt;
void mult(int *a,int i)
{
int jw=0;//进位
for(int j=1;j<=1000;j++)
{
a[j]=a[j]*i+jw;
jw=a[j]/10;
a[j]=a[j]%10;
}
}
void pplus(int *b,int *a)
{
int jw=0;//进位
for(int j=1;j<=1000;j++)
{
b[j]=b[j]+a[j]+jw;
jw=b[j]/10;
b[j]=b[j]%10;
}
}
int main()
{
scanf("%d",&n);
a[1]=1;
for(int i=1;i<=n;i++)
{
mult(a,i);
pplus(b,a);
}
for(int i=1000;i>=1;i--)
{
if(b[i]!=0)
cnt=1;
if(cnt==1)
printf("%d",b[i]);
}
return 0;
}
参考自:题解 P1009 【阶乘之和】
- 阶乘数码
#include<bits/stdc++.h>
using namespace std;
int t,n,sm,a[10001],j,ans;
int main()
{
scanf("%d",&t);
while(t--)
{
for(int i=1;i<=1000;i++)
a[i]=0;
ans=0;
a[1]=1;
int w=1;
int jw=0;
scanf("%d %d",&n,&sm);
for(int i=2;i<=n;i++)
{
jw=0;
for(j=1;j<=w;j++)
{
a[j]=a[j]*i+jw;
jw=a[j]/10;
a[j]=a[j]%10;
}
while(jw>0)
{
a[j]=jw%10;
jw/=10;
j++;
}
w=j-1;
}
for(int i=w;i>=1;i--)
{
if(a[i]==sm)
ans++;
}
printf("%d\n",ans);
}
return 0;
}
参考自:题解 P1591 【阶乘数码】