1. 求N!
/*问题描述:
求N的阶乘
变量条件:N为正整数,且N≤1000。
运行时限:1秒/测试数据。
输入格式:仅一个数,N。
输出格式:仅一个数,N!的结果。*/
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
int res[10010];//存放整数N
int main()
{
int n;
while (scanf("%d", &n) == 1)
{
int i, j;
memset(res, 0, sizeof(res));
res[0] = 1;//存放整数N的位数
res[1] = 1;
for (i = 2; i <= n; i++)
{
for (j = 1; j <= res[0]; j++)
res[j] = res[j] * i;//每一个位都乘,如12*3=1*3 2*3
for (j = 1; j <= res[0]; j++)
{
if (res[j] >= 10)//进位
{
res[j+1] += res[j] / 10;
res[j] %= 10;
if (j == res[0])
res[0]++;//位数增加
}
}
}
for (i = res[0]; i >= 1; i--)//倒序输出
printf("%d", res[i]);
printf("\n");
}
return 0;
}
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
int i;
int arr3[102];//计算结果
char arr1[100],arr2[100];//字符串存储大数
int a1[100],a2[100];//字符串转化成的数组存储大数
while(cin>>arr1>>arr2)
{
memset(arr3,0,sizeof(arr3));
memset(a1,0,sizeof(a1));
memset(a2,0,sizeof(a2));
int len1 = strlen(arr1);
int len2 = strlen(arr2);
int j=0;
for(i=len1-1;i>=0;i--)
a1[j++]=arr1[i]-'0';
j=0;
for(i=len2-1;i>=0;i--)
a2[j++]=arr2[i]-'0';
for(i=0;i<100;i++)
{
arr3[i]=a1[i]+a2[i];
}
///cout<<arr3[100]<<endl;
for(i=0;i<100;i++)
{
if(arr3[i]>=10)
{
arr3[i+1]+=arr3[i]/10;
arr3[i]=arr3[i]%10;
}
}
int k=0;
for (i =101; i>=0; --i)
{
if(arr3[i]!=0)
{
k=i;
break;
}
}
for(i=k;i>=0;--i)
cout<<arr3[i];
cout<<endl;
}
return 0;
}
#include <iostream>
#include <string.h>
using namespace std;
int arr3[200];
char arr1[100],arr2[100];
int a1[100],a2[100];
int main()
{
int i;
while(cin>>arr1>>arr2)
{
memset(arr3,0,sizeof(arr3));
int len1 = strlen(arr1);
int len2 = strlen(arr2);
int j=0;
for(i=len1-1;i>=0;i--)
a1[j++]=arr1[i]-'0';
j=0;
for(i=len2-1;i>=0;i--)
a2[j++]=arr2[i]-'0';
for(i=0;i<100;i++)
{
for(j=0;j<100;j++)
arr3[j+i]+=a1[i]*a2[j];
}
///cout<<arr3[100]<<endl;
for(i=0;i<200;i++)
{
if(arr3[i]>=10)
{
arr3[i+1]+=arr3[i]/10;
arr3[i]=arr3[i]%10;
}
}
int k=0;
for (i =199; i>=0; --i)
{
if(arr3[i]!=0)
{
k=i;
break;
}
}
cout<<k+1;
for(i=k;i>=0;--i)
cout<<arr3[i];
cout<<endl;
}
return 0;
}