Problem A: 密码
Time Limit: 1 Sec Memory Limit: 128 MB
Submit H-Score Code Solution
Description
在浩浩茫茫的苍穹深处,住着玉帝和他的神仆们,他们闲谈着下界的凡人俗事,对人世间表现的聪明智慧,大加赞赏。今天他们正在观赏大地风光人情之际,忽然从遥远的东海之滨传来一阵欢笑声,玉帝纵目望去,只见镇海中学内聚集了全宁波的中小学精英学生,他们要干什么呢?
原来他们都在做一种破译密码的游戏,人们发现:一根密码棒上的数字加上另一根密码棒上的数字,就是开启天庭司粮库密码锁的的密码。
如:1233+67122=68355,则68355就是一组有效的密码。
"太简单了!"人们高呼起来,继续探索着。
"这不过是早期的密码系统而已。"玉帝轻蔑地环顾神仆们说道。
可是,当人们演算了 139513+3344=142857 后,玉帝的神色愈来愈不对了,要知道,142857是一个特别的数字,这可是天庭的机密,是谁将这些机密泄露给世人的呢?
于是,玉帝搬出一张牌,对司粮库主管神农氏说:"将这张牌打出去,看看他们还逞能不?"
这是天庭中一张王牌,但平凡得很,只不过将密码的位数增大到不超过200位而已,可是难就难在你看到文件:mima.in中的两个数后,必须在1秒钟内将密码输出到文件:mima.out中,否则这组密码就失效了。
玉帝还算是仁慈的,没有将更难的牌打出来,他想把天庭的粮食恩赐人间,但他绝不会给那些不动脑子的人。
现在请你解开天庭司粮库密码锁的密码,帮助人们获得天庭恩赐的粮食。
Input
输入文件mima.in共有两行,每行一个正整数。
Output
输出文件mima.out只有一行,该行只有一个正整数,为输入的两个正整数之和。
- Sample Input
1233
67122
- Sample Output
68355
HINT
【数据限制】
30%的数据:结果的值<2×10^9。
50%的数据:结果的值<1×10^16。
100%的数据:结果的值<1×10^200。
#include <bits/stdc++.h>
using namespace std;
int j=0,k;
int a[300],b[300],c[300];
char ch1[300],ch2[300];
int main()
{
cin>>ch1>>ch2;
for(int i=strlen(ch1)-1;i>=0;i--)
{
j++;
a[j]=ch1[i]-48;
}
j=0;
for(int i=strlen(ch2)-1;i>=0;i--)
{
j++;
b[j]=ch2[i]-48;
}
for(int i=1;i<=200;i++)
{
c[i]=a[i]+b[i]+k;
k=c[i]/10;
c[i]%=10;
}
k=200;
while(c[k]==0&&k>1)k--;
for(int i=k;i>=1;i--)cout<<c[i];
return 0;
}
Problem B: 计算2的N次方
Time Limit: 1 Sec Memory Limit: 128 MB
Submit H-Score Code Solution
Description
任意给定一个正整数N(N<=100),计算2的n次方的值。
Input
输入一个正整数N。
Output
输出2的N次方的值。
- Sample Input
5
- Sample Output
32
#include <iostream>
using namespace std;
int main()
{
int a[100],n,k;
cin>>n;
a[0]=1;
a[1]=1;
for(int i=1;i<=n;i++)
{
k=0;
for(int j=1;j<=a[0];j++)
{
a[j]=a[j]*2+k;
k=a[j]/10;
a[j]%=10;
}
if(k>0)
{
a[0]++;
a[a[0]]=k;
}
}
for(int i=a[0];i>0;i--)
cout<<a[i];
return 0;
}
Problem C: 阶乘
Time Limit: 1 Sec Memory Limit: 128 MB
Submit H-Score Code Solution
Description
输入一个正整数n,求n的阶乘。(n的范围:1<=n<=1000)
- Sample Input
3
- Sample Output
6
HINT
提示:注意数据范围
#include<bits/stdc++.h>
using namespace std;
const int maxx = 5000;
int str[maxx];
void Cal(int n)
{
for (int i = 0; i<maxx; i++)str[i] = 0;
str[1] = 1; int j;
int len = 1, c = 0;
for (int i = 2; i <= n; i++)
{
for (j = 1; j <= len; j++)
{
str[j] = str[j] * i + c;
c = str[j] / 10;
str[j] = str[j] % 10;
}
while (c>0)
{
str[j] = c % 10;
j++;
c /= 10;
}
len = j - 1;
}
for (int j = len; j >= 1; j--)
cout << str[j];
cout << "\n";
}
int main()
{
int n;
while (cin >> n)
{
if (n == 0)printf("1\n");
else Cal(n);
}
}
Problem D: 阶乘和
Time Limit: 1 Sec Memory Limit: 128 MB
Submit H-Score Code Solution
Description
已知正整数N(N<=100),设S=1!+2!+3!+...N!。其中"!"表示阶乘,即N!=1*2*3*……*(N-1)*N,如:3!=1*2*3=6。请编程实现:输入正整数N,输出计算结果S的值。
Input
一个正整数N;
Output
输出计算结果S的值。
- Sample Input
4
- Sample Output
33
求大佬解答
如果你们喜欢的话不妨点个赞