/*任务:高精度,计算大数乘小数
*
*参数:乘法函数mul参数为 被乘数a[],保存最终结果的ans数组,乘数b
*结果:ans数组中ans[0]为最高位,以此类推
*/
#include <iostream>
#include <string.h>
using namespace std;
void mul(char a[],char ans[],int b) {
int i,j,s,len,c=0;
char temp[1000];
len=strlen(a);
for (i=0;i<len;i++)
temp[len-i-1]=a[i]-'0';
for(j=0;j<len;j++){
s=temp[j]*b+c;
temp[j]=s%10;
c=s/10;
}
while(c){//记录进位
temp[len++]=c%10;
c/=10;
}
for (i=0;i<len;i++)
ans[len-1-i]=temp[i]+'0';
ans[len]='\0';
for(i=0;i<len;i++)
cout<<ans[i];
}
int main()
{
char a[1000],ans[1000];
int b;
cin>>a>>b;
mul(a,ans,b);
return 0;
}
/*任务:高精度,计算大数加大数
*
*参数:乘法函数mul参数为 被加数a[],加数b[],保存最终结果的ans数组
*结果:ans数组中ans[0]为最高位,以此类推
*/
#include <iostream>
#include <string.h>
using namespace std;
int add(char a[],char b[],char ans[]) {
int i,j,s,len,c=0;
int temp_a[10000],temp_b[10000],temp_ans[10000];
memset(ans,0,sizeof(ans));
memset(temp_a,0,sizeof(temp_a));
memset(temp_b,0,sizeof(temp_b));
memset(temp_ans,0,sizeof(temp_ans));
len=max(strlen(a),strlen(b));
for (i=0;i<strlen(a);i++)
temp_a[strlen(a)-i-1]=a[i]-'0';
for (i=0;i<strlen(b);i++)
temp_b[strlen(b)-i-1]=b[i]-'0';
for(j=0;j<len;j++){
s=temp_a[j]+temp_b[j]+c;
temp_ans[j]=s%10;
c=s/10;
}
if(c) temp_ans[len++]=c;
for (i=0;i<len;i++)
ans[len-1-i]=temp_ans[i]+'0';
ans[len]='\0';
for(int i=0;i<len;i++)
cout<<ans[i];
cout<<endl;
}
int main()
{
char a[1000],b[1000],ans[1000];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
cin>>a>>b;
add(a,b,ans);
return 0;
}
/*任务:计算N!
*
*参数:阶乘函数fac的参数为N的值和保存最终结果的ans数组
*结果:ans数组中ans[0]为最高位,以此类推
*
*/
#include <stdio.h>
#include <string.h>
#define MAX 50000
void fac(int n,int*ans){
int temp[1000];
int len=1;
int i,j,c,s;
memset(temp,0,sizeof(temp));
memset(ans,0,sizeof(ans));
temp[0]=1;
for(i=1;i<=n;i++){
c=0;
for(j=0;j<len;j++){
s=temp[j]*i+c;
temp[j]=s%10;
c=s/10;
}
while(c){//记录进位
temp[len++]=c%10;
c/=10;
}
}
for (i=0;i<len;i++)
ans[len-1-i]=temp[i];
ans[len]='\0';
for(i=0;i<len;i++)
printf("%d",ans[i]);
printf("\n");
}
int main()
{
int n,k,i,j;
int ans[MAX];
while(scanf("%d",&n)!=EOF)
fac(n,ans);
return 0;
}