关于总是输出0
查看原帖
关于总是输出0
568903
Miracle1024楼主2023/4/19 22:39

闰土(猹?),输入什么都一直输出0

做不出来我会洗掉的啦

//1~n的阶乘和
#include<iostream>
using namespace std;
typedef long long ll;
short a[114]={0},b[114]={0},k=0,sa[114];
void bclr(void){//清空数组b
	for(int i=0;i<114;i++){
		b[i]=0;
	}
}
void saclr(void){//清空数组sa
	for(int i=0;i<114;i++){
		sa[i]=0;
	}
}
int len(void){//a、b长度最大值
	for(int i=113;i>=0;i--){
		if(a[i]!=0||b[i]!=0){
			return i;
		}
	}
}
int alen(void){//啊的长度
	for(int i=113;i>=0;i--){
		if(a[i]!=0){
			return i;
		}
	}
}
int blen(void){//别的长度
	for(int i=113;i>=0;i--){
		if(b[i]!=0){
			return i;
		}
	}
}
void add(void){//a加上b的和存储在a内
	k=len();
    for(int i=1;i<=k;i++){
        a[i]+=b[i];
        a[i+1]+=a[i]/10;
        a[i]=a[i]%10;

    }
    while(a[k+1]){
        k++;
    }
}
void badd (short ss){//把短整型ss加到b数组上
	short i=1;
	while(ss!=0){
		b[i]+=ss%10;
		b[i+1]+=b[i]/10;
		i++;
		ss/=10;
	}
}
void mult(short s){//把a数组加上
	saclr();
	b[1]=1;
	short i=1,t=s;
	if(s==0){
		return;
	}
	while(s){
		sa[i]+=s%10;
		s/=10;
		i++;
	}
	
    for(int h=1;h<=blen();h++){
    	for(int j=1;j<=i;j++){
    		a[h+j-1]+=sa[j]*b[h];
		}
	}//乘法运算

	for(int i=1;i<=k;i++){
        a[i+1]+=a[i]/10;
        a[i]=a[i]%10;
    }//进位
    
    while(a[k]==0){
//    	cout<<k<<" "<<a[k]<<endl;//这句测试用的,注释掉了
    	k--;
	}//去前导零
	mult(s--);
	return;
}
int main(){
//	freopen("doc.in","r",stdin);
//	freopen("doc.out","w",stdout);
	short n,kx;
	cin>>n;
	for (short i=1;i<=n;i++){
		bclr();
		mult(i);
		add();
		for(int i=113;i>=1;i--){
			cout<<b[i]<<" ";
		}
		cout<<endl;
	}
	for(int i=alen();i>=1;i--){
		cout<<a[i];
	}
    return 0;
}

哼啊啊啊啊不会做救救我嘤嘤嘤

2023/4/19 22:39
加载中...