首页 > 其他分享 >【暑假题目】20030703 两数相加

【暑假题目】20030703 两数相加

时间:2023-07-06 13:34:15浏览次数:39  
标签:20030703 ++ 相加 加数 暑假 2023 次方 sum 1000

两数相加

题目

请使用C++计算出2^2023与3^2023的和

题目分析

首先通过题目,我们将所求的两个加数看为a,b,我们可以关注到两个点:

1.首先要解决的是两个加数的求法,这里分别有两种求法:

①通过for循环求得a,b两个加数。

②通过指数函数pow函数得到a,b两个加数。

在可以调用函数的情况下,我们应该尽力使用函数来节省我们的运算,所以在这里,我们初步定为使用pow函数来求a,b两个加数。

2.我们得到的两个加数是一个超大数字,此刻,我们面临了一个问题——超大数据的运算及其输出。

思路及其代码实现

思路一

采用指数函数pow求的两个加数后直接相加。

代码一

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
	cout << pow(2, 2023) + pow(3, 2023) << endl;
	return 0;
}

结果一

 反思:

        由于该计算超出了计算器可以表示浮点数的最大范围,即溢出,所以运行后显示inf(结果溢出),经检验后发现,如果只计算2的2023次方或者只计算3的2023次方也会结果溢出,所以,此时我们发现了本题的关键——自己实现一个无限长的数据类型

        说到无限长的数据类型我们会想到什么?

        long double?不行,long double最长为16个字节,还称不上是无限长。这个时候应该想到——数组,使用数位拆分的方法,将一个超大型数据的每一位数拆分到一个足够长的数组当中去,在计算四则运算时,可以再建立一个存储进位的数组配合运算,等到输出超大型数据的时候,通过for循环进行输出。

思路二

通过循环计算两个加数,通过数位拆分将两个加数分别存入对应的数组,再建立一个进位数组进行运算

代码二

#include<iostream>
using namespace std;
int main()
{
	int sum[1000], a[1000], b[1000];
	int i, j, k;

	for (i = 0; i < 1000; i++)//将数组中所有的数置零
	{
		a[i] = 0;
		b[i] = 0;
	}

	a[0] = 1;
	b[0] = 1;//避免一直循环0的次方
	sum[0] = 0;//使和=0,相当于sum=0

	//计算2的2023次方
	for (i = 0; i < 2023; i++)//2的2023次方,故循环2023次
	{
		for (j = 0; j < 1000; j++)//按位数*2
		{
			a[j] *= 2;
		}
		for (j = 0; j < 1000; j++)//进位处理
		{
			if (a[j] > 9)//大于9的进位
			{
				a[j + 1]++;//最大进位为1
				a[j] %= 10;//去个位的数值
			}
		}
	}

	//计算3的2023次方
	for (i = 0; i < 2023; i++)//3的2023次方,故循环2023次
	{
		for (j = 0; j < 1000; j++)//按数*3
		{
			b[j] *= 3;
		}
		for (j = 0; j < 1000; j++)//进位处理
		{
			if (b[j] > 9)
			{
				k = b[j] / 10;//提取需十位数需进位的数字
				b[j + 1] += k;
				b[j] %= 10;//提取个位上的数值
			}
		}
	}

	//计算和
	for (i = 0; i < 1000; i++)
	{
		sum[i] = a[i] + b[i];
	}
	for (i = 0; i < 1000; i++)
	{
		if (sum[i] > 9)
		{
			sum[i + 1]++;
			sum[i] %= 10;
		}
	}

	//输出
	{
		for (i = 999; i >= 0; i--)
		{
			cout << sum[i];
		}
	}
	return 0;
}

  结果二

 

 

标签:20030703,++,相加,加数,暑假,2023,次方,sum,1000
From: https://www.cnblogs.com/hcrzhi/p/17527347.html

相关文章

  • 暑假第一周
    暑假的第一周处于算法与数据结构小学期内,在这期间完成了算法与数据结构小学期的内容,每天上午八点半到十一点半,或者两点到三点是上课时间,在这个小学期内我请假回家了五天左右,原因是亲人去世。这五天期间没有写东西。返校后验收了算法与数据结构小学期第二阶段的内容。......
  • 暑假周记(7.5)
    今天周三高中好兄弟他们终于也开始陆陆续续回家了,明天秦皇岛的一个回家,后天张家口的一个,早上起床学完java下午就开始跟好兄弟们玩沙盒游戏,里面复杂而又简单的工业原理让我们又梦回中学,脑子里面回忆起被化学老师支配的恐惧,现在一回忆,又是怀念,又是痛苦,甜蜜的同学情,痛苦的学业压身,悲......
  • 用天梯赛打开暑假生活的第十天
    从坐牢到入门的程序设计(10)开始时间2023-07-04 09:10:02结束时间2023-07-04 21:48:28前言:哎嘿,呜呼!L1-046整除光棍一、题目编号及题目说明二、程序功能测试及说明使用循环来计算一个奇数x的光棍数,其中光棍数定义为只包含数字1且能被x整除的数。三、程序设计思路及......
  • 2023年暑假集训总结/7.4
    2023年暑假集训总结/7.3预估成绩:100+20+10+20=150实际成绩:0+61+19+0=80T1最大公约数题意:有n个数,取n-1个数,求可以得到的最大gcd。思路&做法:有一个思路是将所有数字质因数分解,然后对于每一个质数,判断他是否在这n个数中“拖了后腿”,这样就可以O(nk)地求出答案,k是质因数的个......
  • 暑假集训计划
    其实也没什么好写的吧。大概列几点模拟赛成绩要求每次\(200+\)(似乎不难?),尽量\(250+\),争取更多\(300+\)。(不过没记错的话去年NOIP结束的时候给今年定的目标就是\(300+\),可能都定低了?)少学点uselessalgorithm,多练练usefulalgorithmCF上个2100应该问题不大,瓶颈可能在......
  • 2023ACM暑假训练day 8-9 线段树
    目录DAY8-9线段树训练情况简介题DAY8-9线段树训练地址:传送门训练情况简介题题意:思路:......
  • 2023年暑假集训总结/7.1
    6-26T1多米诺骨牌Hades与Dionysus在狂饮后玩起了多米诺骨牌的小游戏。现在桌上有n块多米诺骨牌,每块多米诺骨牌上半部分和下半部分上都有一个整数。每次翻转可让一块多米诺骨牌上下翻转,即上下部分数交换。Hades想让n块骨牌上半部分的数加起来是一个偶数,而Dionys......
  • 暑假Java学习第二周——第二天
    7.3键盘录入及录入求和:importjava.util.Scanner;publicclassTest{publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.println("请输入第一个数字");inti1=sc.nextInt();System.out.println("请输入第二个数字");inti2=sc.nex......
  • 2023年暑假集训总结/7.3
    2023年暑假集训总结/7.3预估成绩:100+50+40+20=210实际成绩:100+25+24+25=174T1房题意:有n个已知中心和长度且互不重合的区间,问有多少个长度为t的区间恰好与其中一个区间的一个端点相等,且不与所有区间重合思路&做法:签到题,注意到答案上界为2n,只需要依次枚举接在每个区间左右......
  • 暑假周记(7.3)
    今日周一,又是新的一周、新的一天,昨天那么多愁善感那是我么?当然是,但是那又有什么关系,负面情绪就是要那样发泄出来,今天的我又是新的我。七月三号了,距离去补习班上班还有不到一周,去教四五年级的小朋友们英语,正好上这个班又可以让我的作息更加规律有效帮助我大二的作息,只要回学校的时......