发布网友 发布时间:2022-04-22 04:16
共5个回答
热心网友 时间:2024-01-02 23:12
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
string add(const string &a,const string &b);
string multiply(const string &a,char b);
string multi(const string &a,const string &b);
string factorial(int n);
int main()
{
cout<<factorial(15);
return 0;
}
string add(const string &a,const string &b)
{
string sh,lo,r; int g=0;
if(a.size()>b.size())
{
sh=string(a.size()-b.size(),'0');
sh+=b; lo=a;
}
else
{
sh=string(b.size()-a.size(),'0');
sh+=a; lo=b;
}
r.resize(sh.size());
for(int i=sh.size()-1;i>=0;--i)
{
r[i]=sh[i]+lo[i]-48+g;
if(r[i]>'9')
{
r[i]-=10;
g=1;
}
else
{
g=0;
}
}
if(g==1)
r="1"+r;
return r;
}
string multiply(const string &a,char b)
{
string r;
r.resize(a.size()); int g=0;
if(b=='0')
return "0";
if(b=='1') //加快计算
return a;
for(int i=a.size()-1;i>=0;--i)
{
r[i]=(a[i]-48)*(b-48)%10+48+g;
if(r[i]>'9')
{
r[i]-=10;
g=((a[i]-48)*(b-48))/10+1;
continue;
}
g=((a[i]-48)*(b-48))/10;
}
if(g!=0)
r.insert(0,string(1,g+48));
return r;
}
string multi(const string &a,const string &b)
{
string r("0");
string *c=new string[b.size()];
for(int i=0;i<b.size();++i)
{
c[i]=multiply(a,b[b.size()-1-i])+string(i,'0');
r=add(r,c[i]);
}
delete[] c;
return r;
}
string factorial(int n)
{
char b[7];
string r="1";
for(int i=1;i<n+1;++i)
{
itoa(i,b,10);
r=multi(r,b);
}
return r;
}
热心网友 时间:2024-01-02 23:12
你用double型就不会溢出了
如果非得要用整型那就用数组算.
热心网友 时间:2024-01-02 23:13
用长整型ld表示
#include<stdio.h>
void main()
{
long int a=1,b=1;
int i;
for(i=1;i<=15;i++)
{
a=b*i;
b=a;
}
printf("15!=%ld\n",b);
}
热心网友 时间:2024-01-02 23:13
用位整数,__int
热心网友 时间:2024-01-02 23:14
用long int