您的位置:首页 > 其它

1000的阶乘

2017-03-16 18:22 253 查看
用字符串存储大数

#include <iostream>
using namespace std;

int multi(char a, char b)
{
return (a - '0') * (b - '0');
}

void strMulti(char *a, char *b, char *c)
{
// 最好对a,b和c的合法性进行判断

int lenA = strlen(a);
int lenB = strlen(b);
int maxLen = lenA + lenB;
int *p = new int[maxLen];
memset(p, 0, maxLen * sizeof(int)); // 千万要注意不要写成memset(p, 0, maxLen);

int i, j;
for(j = lenB - 1; j >= 0; j--)
{
for(i = lenA - 1; i >= 0; i--)
{
p[j + i + 1] += multi(b[j], a[i]);
}
}

// 处理进位操作
for(i = maxLen - 1; i >= 1; i--)
{
p[i - 1] += p[i] / 10;
p[i] = p[i] % 10;
}

int index=0;
if(p[0]==0) index++;
for(index;index<maxLen;index++){
*c++=p[index]+'0';
}
*c='\0';
}

void main(){
int num;
cin>>num;
char str[5000];
*str='1';
*(str+1)='\0';
char tmp[50];
for(int i=1;i<=num;i++){
itoa(i,tmp,10);
strMulti(str,tmp,str);
}
cout<<str<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: