acm大数问题
acm:大数阶乘
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
- 输入
- 输入一个整数m(0<m<=5000)
- 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符
- 样例输入
- [/cpp]50
- 样例输出
-
[/cpp]304140932017133780436126
081660647688443776415689 60512000000000000 -
[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]111111111111111111111111
111 88888888888888888888(\n换行) -111111111111111111111111 1 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]