小视野代码整理第2讲 高精度算法(一)

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: 计算2N次方

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

求大佬解答

如果你们喜欢的话不妨点个赞

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值