David007 @ 2023-04-01 13:17:49
本代码已经调了两天了!!,请大佬们帮忙看一下,非常感谢!!
#include<iostream>
#include<cstring>
#include<string>
using namespace std;
//高静加法
string gao_jia(string a,string b){
string ans ="";
int na[505],nb[505];
memset(na,0,sizeof(na));
memset(nb,0,sizeof(nb));
int len1=a.size();
int len2=b.size();
int len=max(len1,len2);
for(int i=0;i<len1;i++){
na[len1-i-1]=a[i]-'0';
}
for(int i=0;i<len2;i++){
nb[len2-i-1]=b[i]-'0';
}
for(int i=0;i<len;i++){
na[i]+=nb[i];
na[i+1]+=na[i]/10;
na[i]%=10;
}
int i=len;
while(i>0&&na[i]==0) i--;
for(i;i>=0;i--){
ans+=char(na[i]+'0');
}
return ans;
}
//高精乘法
string gao_cheng_dan(string a,int b)
{
int na[505],len;
string ans="";
len = a.size();
for(int i=0;i<len;i++)
{
na[len-i-1] = a[i]-'0';
}
for(int i=0;i<len;i++)
{
na[i] *= b;
}
//统一处理进位
for(int i=0;i<len;i++)
{
na[i+1] += na[i]/10;
na[i] %= 10;
}
while(na[len])
{
na[len+1] = na[len]/10;
na[len] %= 10;
len++;
}
for(int i=len-1;i>=0;i--)
{
ans += char(na[i]+'0');
}
return ans;
}
int p;
string u="0";
int main(){
cin>>p;
while(p!=0){
string o="1";
for(int i=1;i<=p;i++){
o=gao_cheng_dan(o,i);
}
u=gao_jia(o,u);
p--;
}
cout<<u;
}
by __zhuruirong__ @ 2023-04-02 12:34:34
#include<iostream>
#include<string>
#include<vector>
using namespace std;
typedef vector<int> vi;
vi add2(vi& A,vi& B)
{
vi C;
if(A.size()<B.size()) return add2(B,A);
int t=0;
for(int i=0;i<A.size();i++)
{
t+=A[i];
if(i<B.size()) t+=B[i];
C.push_back(t%10);
t/=10;
}
if(t)
C.push_back(1);
return C;
}
vi add(vi& A,int b)
{
vi C;
int t=0;
for(int i=0;i<A.size()||t;i++)
{
if(i<A.size())
t+=A[i]*b;
C.push_back(t%10);
t/=10;
}
while(C.size()>1&&C.back()==0)
C.pop_back();
return C;
}
int main()
{
int a;
cin>>a;
vi ans={0},p={1};
for(int i=1;i<=a;i++)
{
p=add(p,i);
ans=add2(ans,p);
}
for(int i=ans.size()-1;i>=0;i--)
cout<<ans[i];
return 0;
}
by xxc123 @ 2023-04-10 22:15:40
求关注
#include<iostream>
using namespace std;
int a[1001],b[1001];
void add()
{
int t=0;
for(int i=1000;i>=1;i--)
{
b[i]=b[i]+a[i]+t;
t=b[i]/10;
b[i]%=10;
}
}
void multiplication(int x)
{
int t=0;
for(int i=1000;i>=1;i--)
{
a[i]=a[i]*x+t;
t=a[i]/10;
a[i]%=10;
}
}
void print()
{
int flag=0;
for(int i=1;i<=1000;i++)
{
if(b[i]!=0) flag=1;
if(flag) cout<<b[i];
}
}
int main()
{
a[1000]=b[1000]=1;
int n;
cin>>n;
for(int i=2;i<=n;i++)
{
multiplication(i);
add();
}
print();
return 0;
}
从末尾算,a是阶乘积,s是和
by xxc123 @ 2023-04-10 22:15:47
@David007
by David007 @ 2023-04-28 21:13:23
已经过了,谢谢大佬,已关注
by David007 @ 2023-04-28 21:13:59
@xxc123