大幂计算和大阶乘计算【C语言】
大幂计算:
#include<stdio.h>
long long int c[1000000]={0};
int main()
{
long long a,b,x=1;
c[0]=1;
printf("请输入底数:");
scanf("%lld",&a);
printf("请输入指数:");
scanf("%lld",&b);
for(int i=0;i<b;i++)
{
if(x>99900){
printf("太大了!无法计算!");
return 0;
}
for(int j=0;j<x;j++)
{
c[j]*=a;
}
for(int j=0;j<x;j++)
{
if(c[j]>9){
for(int k=j;k<x;k++)
{
if(c[k]<9)break;
if(k==x-1)x++;
c[k+1]+=c[k]/10;
c[k]%=10;
}
}
}
}
printf("%lld^%lld=",a,b);
for(int i=x-1;i>=0;i--)
{
if(i==x-1&&c[i]==0){
x--;
continue;
}
printf("%lld",c[i]);
}
printf("\n结果共计%lld位数!",x);
return 0;
}
大阶乘计算 :
#include<stdio.h>
long long int c[1000000];
int main()
{
long long a,x=1;
c[0]=1;
printf("请输入阶数:");
scanf("%lld",&a);
for(int i=2;i<=a;i++)
{
if(x>999000){
printf("太大了!无法计算!");
return 0;
}
for(int j=0;j<x;j++)
{
c[j]*=i;
}
for(int j=0;j<x;j++)
{
if(c[j]>9){
for(int k=j;k<x;k++)
{
if(c[k]<9)break;
if(k==x-1)x++;
c[k+1]+=c[k]/10;
c[k]%=10;
}
}
}
}
printf("%lld!=",a);
for(int i=x-1;i>=0;i--)
{
if(i==x-1&&c[i]==0){
x--;
continue;
}
printf("%lld",c[i]);
}
printf("\n结果共计%lld位数!",x);
return 0;
}
应用的题:
P1009 [NOIP 1998 普及组] 阶乘之和https://www.luogu.com.cn/problem/P1009题解代码
#include<stdio.h>
int as(int a,int c[]){
int x=1;
c[0]=1;
for(int i=2;i<=a;i++)
{
for(int j=0;j<x;j++)
{
c[j]*=i;
}
for(int j=0;j<x;j++)
{
if(c[j]>9){
for(int k=j;k<x;k++)
{
if(c[k]<9)break;
if(k==x-1)x++;
c[k+1]+=c[k]/10;
c[k]%=10;
}
}
}
}
return x;
}
int main() {
int a,exp=0;
int data[100]={0};
scanf("%d",&a);
for(int i=1;i<=a;i++){
int temp[100]={0},b;
b=as(i,temp);
if(b>exp)exp=b;
for(int j=0;j<exp;j++){
data[j]+=temp[j];
if(data[j]>9){
data[j+1]++;
data[j]%=10;
if(j==exp-1)exp++;
}
}
}
for(int i=exp-1;i>=0;i--){
printf("%d",data[i]);
}
return 0;
}