用字符串存储大数
#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;
}