一道清华上机题目(求n! 高精度)
来源:互联网 发布:免费国际交友软件 编辑:程序博客网 时间:2024/04/29 14:28
//writen by sunboy
//2007.08.30
//说明:输入n(0<=n<=1000) 输出n!
#include <iostream>
#include <string>
#include <cstring>
#include<sstream>
using namespace std;
string hp_mul(string &a,string &b); //返回a*b ,字符串乘法
void change(int a[],string &str) //将string转换为数组表示方式
...{
int i,len=str.length ();
for(i=len-1;i>=0;i--)
a[len-i-1]=str[i]-'0';
}
string itos(int i) //将int 转换成string
...{
stringstream s;
s << i;
return s.str();
}
int main()
...{
string f1,f2,f3;
int n,i;
while(cin>>n)
...{
if(n==0)
...{
cout<<0<<endl;
continue;
}
f1="1";
for(i=2;i<=n;i++)
f1=hp_mul(f1,itos(i));
cout<<f1<<endl;
}
return 0;
}
string hp_mul(string &a,string &b) //返回a*b ,字符串乘法
...{
int i,j,x[5120],y[5120],z[5120];
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
int len1=a.length ();
int len2=b.length ();
change(x,a);
change(y,b);
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
z[i+j]+=x[i]*y[j];
for(i=0;i<=len1+len2;i++)
if(z[i]>=10)
...{ z[i+1]+=z[i]/10;
z[i]%=10;
}
for(i=len1+len2+2;i>=0;i--)
if(z[i])break;
string res="";
for(j=i;j>=0;j--)
res+=z[j]+'0';
return res;
}
//2007.08.30
//说明:输入n(0<=n<=1000) 输出n!
#include <iostream>
#include <string>
#include <cstring>
#include<sstream>
using namespace std;
string hp_mul(string &a,string &b); //返回a*b ,字符串乘法
void change(int a[],string &str) //将string转换为数组表示方式
...{
int i,len=str.length ();
for(i=len-1;i>=0;i--)
a[len-i-1]=str[i]-'0';
}
string itos(int i) //将int 转换成string
...{
stringstream s;
s << i;
return s.str();
}
int main()
...{
string f1,f2,f3;
int n,i;
while(cin>>n)
...{
if(n==0)
...{
cout<<0<<endl;
continue;
}
f1="1";
for(i=2;i<=n;i++)
f1=hp_mul(f1,itos(i));
cout<<f1<<endl;
}
return 0;
}
string hp_mul(string &a,string &b) //返回a*b ,字符串乘法
...{
int i,j,x[5120],y[5120],z[5120];
memset(x,0,sizeof(x));
memset(y,0,sizeof(y));
memset(z,0,sizeof(z));
int len1=a.length ();
int len2=b.length ();
change(x,a);
change(y,b);
for(i=0;i<len1;i++)
for(j=0;j<len2;j++)
z[i+j]+=x[i]*y[j];
for(i=0;i<=len1+len2;i++)
if(z[i]>=10)
...{ z[i+1]+=z[i]/10;
z[i]%=10;
}
for(i=len1+len2+2;i>=0;i--)
if(z[i])break;
string res="";
for(j=i;j>=0;j--)
res+=z[j]+'0';
return res;
}
- 一道清华上机题目(求n! 高精度)
- 一道清华的上机题目
- 清华的一道复试上机题.......
- 高精度之求N!
- 高精度求N!
- 求N的N阶乘的尾数(一道找规律的题目)
- 一道小题目:给出一个n,求n!可被5整除多少次
- 每天一道算法_2_求高精度幂
- ACM题目:求高精度幂C++解法
- 张一飞 求N!的高精度算法
- 张一飞 求N!的高精度算法
- hdu1215 七夕节 一道题目的解题全过程 给我不少启发 求n的因子之和
- 一道求n!的算法题
- 上机项目--n个数求平均值
- 有 一道清华复试上机题 引发的思考,持续更新中……
- 求 Fibonacci 数第n位的位数 ~高精度
- 【C++】高精度方法求2的N次方
- HDU 1042 大数据、高精度,求n的阶乘
- Prolog教程 3
- pligg9.7beta搭起后HTML编辑器插件的安装(-fckeditor的配置与修改变相支持中文文件名:默认上传后不能正常调用-)就像csdn的这个编辑器
- 姑娘的心啊,已经飞了
- C/C++语言面试题目
- SQL语句导入导出大全
- 一道清华上机题目(求n! 高精度)
- 歡迎來坐坐!
- tomcat多域名绑定
- 泰国决定处罚华为 最高罚款50亿元
- AOP技术研究——AOP技术基础
- 梦幻之旅--深入大规模芯片设计全过程
- C++内存管理
- pligg9.7beta搭起后HTML编辑器插件的安装——fckeditor的配置与修改变相支持中文文件名
- 数据恢复之R-Studio的使用常见问题解答