acm大数问题

acm大数问题

 

acm:大数阶乘

时间限制:3000 ms   内存限制:65535 KB
难度:3
描述
我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
输入
输入一个整数m(0<m<=5000)
输出
输出m的阶乘,并在输出结束之后输入一个换行符
样例输入
[/cpp]50
样例输出
[/cpp]30414093201713378043612608166064768844377641568960512000000000000
[cpp]#include
using namespace std;
int main()
{
static int a[17500]={0,1};
int m,i,j,len=1,temp,jin;
cin>>m;
for(i=2;i<=m;i++)
{
jin=0;
for(j=1;j<=len;j++)
{
temp=a[j]*i+jin;a[j]=temp;jin=temp/10;
if(j==len&&jin!=0) len++;
}
}
for(i=len;i>=1;i–) cout<<a[i];cout<<endl;
return 0;
}[/cpp]

acm:比大小

 

时间限制:3000 ms   内存限制:65535 KB

 

难度:2
描述
给你两个很大的数,你能不能判断出他们两个数的大小呢?比如123456789123456789要大于-123456
输入
每组测试数据占一行,输入两个不超过1000位的10进制整数a,b 数据保证输入的a,b没有前缀的0。 如果输入0 0表示输入结束。测试数据组数不超过10组
输出
如果a>b则输出“a>b”,如果a<b则输出“a<b”,如果相等则输出“a==b”。
样例输入
[/cpp]111111111111111111111111111 88888888888888888888(\n换行) -1111111111111111111111111 22222222(\n) 0 0
样例输出
[/cpp]a>b(\n换行) a<b
 

[cpp]#include
#include
using namespace std;
void compare(string str1,string str2)
{
if(str1.size()>str2.size()) cout<<“a>b”<<endl;
else if(str1.size()<str2.size()) cout<<“a<b”<<endl; else if(str1[str1.size()-1]>str2[str2.size()-1]) cout<<“a>b”<<endl;
else if(str1[str1.size()-1]<str2[str2.size()-1]) cout<<“a<b”<<endl;
else cout<<“a==b”<<endl; } int main() { string str1,str2; while(1) { cin>>str1>>str2;
if(str1==”0″&&str2==”0”) break;
if(str1[0]==’-‘&&str2[0]!=’-‘) cout<<“a<b”<<endl;
else if(str1[0]!=’-‘&&str2[0]==’-‘) cout<<“a>b”<<endl;
else if(str1[0]!=’-‘&&str2[0]!=’-‘) compare(str1,str2);
else compare(&str2[1],&str1[1]);
}
return 0;
}[/cpp]