C++编程-高精度算法2(上期标准程序)

目录

先言

标准程序

第一题

第二题

第三题

第四题

题外话

题目

阶乘和

天使的起誓

Hanoi双塔问题


先言

在上期中,我们留下了4道关于高精度算法的题目,都是非常简单的,那么现在将标准程序告诉大家!标程,启动!

标准程序

第一题

#include
#include
using namespace std;
int a[100000],n,i,y,xy[100000];

int main()
{
	cin>>n;
	a[0]=1;
	a[1]=1;
	for (y=1;y<=n;y++) 
	{
		memset(xy,0,sizeof(xy));
	    xy[0]=a[0];
	    for (i=1;i<=a[0];i++)
	    {
		  xy[i]+=a[i]*y;
		  xy[i+1]=xy[i]/10;
		  xy[i]%=10;
		}
	    while (xy[xy[0]+1]>0) 
		{
			xy[xy[0]+2]=xy[xy[0]+1]/10;
			xy[xy[0]+1]%=10;
			xy[0]++;
	    }
	    for (i=1;i<=xy[0];i++) a[i]=xy[i];
	    a[0]=xy[0];
	}
	for (i=a[0];i>=1;i--) cout<

第二题

#include 
#include 	
#include 
#include 
using namespace std;
int main() {
	int n,m,i;
	cin>>n>>m;
	printf("%d/%d=%d.",n,m,n/m);
	n%=m;
	for (i=1;i<=20;i++) {
		n*=10;
		printf("%d",n/m);
		n%=m;
		if (n*pow(10,20-i)

第三题

#include
using namespace std;
int n,i,j,a[15],b[15],l=15;
int main()
{
	cin>>n; b[1]=6; 
	for(i=4; i<=n; i++)
	{
		a[1]=i%100000%10000%1000%100%10;
		a[2]=i%100000%10000%1000%100/10;
		a[3]=i%100000%10000%1000/100;
		a[4]=i%100000%10000/1000;
		a[5]=i%100000/10000;
		a[6]=i/100000;
		for(j=1; j<=l; j++)
		{
			b[j]=b[j]+a[j];
		    if(b[j]>9)
		    {
				b[j]=b[j]%10;
			    b[j+1]=b[j+1]+1;
		    }
		}
	}
	while((l>1)&&(b[l]==0)) l--;
	for(i=l; i>=1; i--) cout<

第四题

#include 
#include 
#include 	
#include 
using namespace std;

int a[10000];
string s1,s2;

void addd()
{
	int a1=s1.size(),a2=s2.size();
	for (int i=0;i1) a[0]--;
	}

int main()
{
    getline(cin,s1);
    getline(cin,s2);
    memset(a,0,sizeof(a));
    addd();
    for (int i=a[0];i>=1;i--) cout<

题外话

说一句题外话,有些人不要以为自己很牛*,就随意说这些题目很难,题目都是非常简单的,不要以为代码很长,题目就很难,做题的意义不是背代码!而是记住方法!只要方法能记住,代码就能记住了,不需要死记代码

题目

编程这个东西是靠练出来的,不是背出来的!

后面再给大家一些题目,不提供标程了

阶乘和

【问题描述】

       已知正整数N(N<=100),设S=1!+2!+3!+...N!。其中"!"表示阶乘,即N!=1*2*3*……*(N-1)*N,如:3!=1*2*3=6。请编程实现:输入正整数N,输出计算结果S的值。

【输入样例】sum.in

       4

【输出样例】sum.out

       33

天使的起誓

【问题描述】

       TENSHI非常幸运的被选为掌管智慧之匙的天使。在正式任职之前,她必须和其他新当选的天使一样,要宣誓。宣誓仪式是每位天使各自表述自己的使命,她们的发言稿被放在N个呈圆形排列的宝盒中。这些宝盒按顺时针方向被编上号码1、2、3……、N-1、N。一开始天使们站在编号为N的宝盒旁。她们各自手上都有一个数字,代表她们自己的发言稿所在的盒子是从1号盒子开始按顺时针方向的第几个。例如:有7个盒子,那么如果TENSHI手上的数字为9,那么她的发言稿所在盒子就是第2个。现在天使们开始按照自己手上的数字来找发言稿,先找到的就可以先发言。TENSHI一下子就找到了,于是她最先上台宣誓:“我将带领大家开启NOI之门……”TENSHI宣誓结束以后,陆续有天使上台宣誓。可是有一位天使找了好久都找不到她的发言稿,原来她手上的数字M非常大,她转了好久都找不到她想找的宝盒。

【问题求解】

       请帮助这位天使找到她想找的宝盒的编号。

【输入格式】

       从文件YUBIKILI.IN的第一、二行分别读入正整数N和M,其中N、M满足

  2 ≤ N ≤ 108,2 ≤ M ≤ 101000

【输出格式】

       把所求宝盒的编号输出到文件YUBIKILI.OUT,文件只有一行(包括换行符)。

样例一

YUBIKILI.IN

7

9

YUBIKILI.OUT

2

样例二

YUBIKILI.IN

11

108

YUBIKILI.OUT

9

Hanoi双塔问题

【问题描述】

       给定A、B、C三根足够长的细柱,在A柱上放有2n个中间有孔的圆盘,共有n个不同的尺寸,每个尺寸都有两个相同的圆盘,注意这两个圆盘是不加区分的(下图为n=3的情形)。现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:

(1)每次只能移动一个圆盘;

(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;

任务:设An为2n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An

C++编程-高精度算法2(上期标准程序)_第1张图片

【输入格式】

         输入文件hanoi.in为一个正整数n,表示在A柱上放有2n个圆盘。

【输出格式】

       输出文件hanoi.out仅一行,包含一个正整数, 为完成上述任务所需的最少移动次数An

样例一

hanoi.in

1

hanoi.out

2

样例二

hanoi.in

2

hanoi.out

6

【限制】

    对于50%的数据,1<=n<=25

    对于100%的数据,1<=n<=200

【提示】

设法建立AnAn-1的递推关系式。

你可能感兴趣的:(信息学奥赛一本通,算法,编程题目/题解/算法,c++,算法,开发语言)