信息学奥赛复赛复习15-CSP-J2022-01乘方-数据类型、类型转换、数据类型溢出、指数、模拟指数运算

news/2024/10/9 18:15:03/文章来源:https://www.cnblogs.com/myeln/p/18454823
PDF文档公众号回复关键字:20241009

1 P8813 [CSP-J 2022] 乘方

[题目描述]

小文同学刚刚接触了信息学竞赛,有一天她遇到了这样一个题:给定正整数 a 和 b,求 a^b 的值是多少。

a^b 即 b 个 a 相乘的值,例如 2^3 即为 3 个 2 相乘,结果为 2×2×2=8

“简单!”小文心想,同时很快就写出了一份程序,可是测试时却出现了错误

小文很快意识到,她的程序里的变量都是 int 类型的。在大多数机器上,int 类型能表示的最大数为 2^31−1,因此只要计算结果超过这个数,她的程序就会出现错误

由于小文刚刚学会编程,她担心使用 int 计算会出现问题。因此她希望你在 ab 的值超过 10^9 时,输出一个 -1 进行警示,否则就输出正确的 a^b 的值

然而小文还是不知道怎么实现这份程序,因此她想请你帮忙

[输入格式]

输入共一行,两个正整数 a,b

[输出格式]

输出共一行,如果 a^b 的值不超过 10^9,则输出 a^b 的值,否则输出 -1

[输入输出样例]

输入 #1

10 9

输出 #1

1000000000

输入 #2

23333 66666

输出 #2

-1

说明/提示

数据规模

对于 10% 的数据,保证 b=1。
对于 30%的数据,保证 b≤2。
对于 60% 的数据,保证 b≤30,a^b≤ 10^18。
对于 100% 的数据,保证 1≤a,b≤10^9。

2 相关知识点

1) 常用数据类型

C++ 为程序员提供了种类丰富的内置数据类型和用户自定义的数据类型

类型 关键字
布尔型 bool
字符型 char
整型 int
浮点型 float
双浮点型 double
无类型 void
宽字符型 wchar_t

取值范围

类型 位数(字节) 范围
char 8位,1 个字节 -128 到 127 或者 0 到 255
unsigned char 8位,1 个字节 0 到 255
signed char 8位,1 个字节 -128 到 127
int 32位,4 个字节 -2147483648 到 2147483647
unsigned int 32位,4 个字节 0 到 4294967295
signed int 32位,4 个字节 -2147483648 到 2147483647
short int 16位,2 个字节 -32768 到 32767
unsigned short int 16位,2 个字节 0 到 65,535
signed short int 16位,2 个字节 -32768 到 32767
long int 64位,8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
signed long int 64位,8 个字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
unsigned long int 64位,8 个字节 0 to 18,446,744,073,709,551,615
float 32位,4 个字节 +/- 3.4e +/- 38 (~7 个数字)
double 32位,8 个字节 +/- 1.7e +/- 308 (~15 个数字)
long double 128位,16 个字节 +/- 1.7e +/- 308 (~15 个数字)
wchar_t 2 或 4 个字节 1 个宽字符

2) 数据溢出

在C语言中,数据溢出是指变量在进行计算或赋值操作时超出了其数据类型所能表示的范围,导致结果不正确或不可预料的行为

#include<bits/stdc++.h>
using namespace std;
int main(){char c=129;//超出了char 表示的数值范围 char最大是127printf("%d",c); return 0;
} 
/*
输出
-127 
*/

3) 数据类型转换

在C++中,数据类型转换(也称为类型转换)是将一种数据类型的值转换为另一种数据类型的过程

例如为了保持小数可以将整形转换为浮点型

int a=5;
float b=a;//隐式地将int转换float

数据类型转换有自动类型转换和强制类型转换转换2种

自动类型转换

往数据类型长的方向转换 保证精度不丢失

比如 int和long long 运算会转换成long long

#include<iostream>
using namespace std;
/*
自动类型转换 往数据类型长的方向转换 保证精度不丢失 
比如 int和long long 运算会转换成long long 
*/
int main(){int a=4;long long b=9;cout<<"a占用字节数: "<<sizeof(a)<<endl;//整形4个字节 cout<<"b占用字节数: "<<sizeof(b)<<endl;//长整形8个字节 cout<<"a+b占用字节数: "<<sizeof(a+b)<<endl; //长整形8个字节return 0;
}
/*
a占用字节数: 4
b占用字节数: 8
a+b占用字节数: 8
*/

赋值运算

在赋值运算中,赋值号两边的数据类型不相同时,把右边表达式的值的类型转换为左边变量的类型,如果把右边表达式的值数据类型长度比左边长,将丢失一部分数据

#include<iostream>
using namespace std;int main(){double d = 123.45;  int i = d; // i现在是123,小数部分被丢弃cout<<"整型i的值为: "<<i<<endl; return 0;
}
/*
整型i的值为: 123
*/

强制类型转换

当自动类型转换不能转换时,可以显示进行类型转换,称强制类型转换

#include<iostream>
using namespace std;
/*求2个数之和 
*/
int main(){int a=2147483647;int b=10;long long c= (long long ) a + b;//把a的类型从int转换成long long cout<<"c变量存储超int范围数:"<<c<<endl;//c的结果为2147483657return 0;
}
/*
c变量存储超int范围数:2147483657
*/

4) 指数

指数是幂运算aⁿ(a≠0)中的一个参数,a为底数,n为指数,指数位于底数的右上角,幂运算表示指数个底数相乘。

当n是一个正整数,aⁿ表示n个a连乘。当n=0时,aⁿ=1

例如

a=2 n=4时

2^4=2 * 2 * 2* 2=16

3 思路分析

1 a的b次方,相当于b个a相乘

2 初始m为1,每次m乘以a,连续乘b个即为结果,超出最大值输出-1,不超输出m

3 根据数据条件可能超出int的最大范围(2147483647),所以相乘的结果存储long long类型的m中

#include<bits/stdc++.h>
using namespace std;
const int N=1e9;//允许的最大值 超出输出-1 
int a,b;//输入a b 
long long m=1;//存储 a^b 
int main(){cin>>a>>b;//输入a bfor(int i=0;i<b;i++){//循环b次 m=m*a;//m从1开始每次乘以a if(m>N){//如果大于允许的最大值 输出-1 cout<<"-1";			return 0;//退出程序 }}cout<<m;//输出 a^b return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/810662.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Postman 教程:新手必备的操作指南

API 已经成为连接不同系统和服务的重要桥梁,无论你是前端开发者、后端工程师还是测试人员,掌握 API 的开发和测试技能都是非常重要的。Postman 是一个广受欢迎的 API 开发工具,它不仅能够帮助你轻松发送 HTTP 请求,还提供了强大的测试、调试和协作功能。本系列教程旨在帮助…

20222327 2024-2025-1 《网络与系统攻防技术》实验一实验报告

一.实验内容 1.了解Linux系统下的基本操作命令,能够处理一些命令出现的error。 2.掌握了栈与堆的概念以及在进程内存管理中的应用。 3.了解基本的汇编语言指令及其功能。 4.能够深刻理解BoF的原理以及如何运用payload完成BoF的攻击 二.实验过程 任务一 直接修改程序机器指令,…

春秋云镜 Privilege

春秋云镜 Privilege上来先用fscan扫一下.___ _ / _ \ ___ ___ _ __ __ _ ___| | __ / /_\/____/ __|/ __| __/ _` |/ __| |/ / / /_\\_____\__ \ (__| | | (_| | (__| < \____/ |___/\___|_| \__,_|\___|_|\_\ fscan ve…

AI在不同领域的应用与行业影响

本文将探讨AI在不同技术领域和行业中的广泛应用,以及这些应用如何影响和改变我们的世界。 I. 引言 AI技术正日益渗透到各个技术领域,从计算机视觉到自然语言处理,再到音频处理,AI的应用正变得越来越广泛。这些技术的发展不仅推动了科学研究的进步,也在实际应用中展现出巨大…

多态和继承

继承:通常意思就是儿子可以继承父亲的东西,在java里面也是一样的,当我们在同一个包内有多个类的成员变量/方法相同时可以使用继承,只可以在子非静态方法使用 继承就是把相同的成员变量/成员方法放在一个类中,然后使用extends这个关键字来让一个类来继承另一类从而达到代码…

Apache DolphinScheduler社区9月进展记录

各位热爱 Apache DolphinScheduler 的小伙伴们,社区 9 月月报更新啦!这里将记录 Apache DolphinScheduler 社区每月的重要更新,欢迎关注! 月度 Merge Star 感谢以下小伙伴上个月为 Apache DolphinScheduler 做的精彩贡献(排名不分先后):@Mighten,@ChaoquanTao,@wangxj3,…

我国首颗可重复使用返回式技术试验卫星成功发射|数字孪生技术助力运载火箭仿真验证系统革命

9月27日18时30分,长征二号丁运载火箭在酒泉卫星发射中心一飞冲天,随后将我国首颗可重复使用返回式技术试验卫星——实践十九号卫星送入预定轨道,发射任务取得圆满成功。▲长二丁火箭发射升空​新一代运载火箭肩负着未来载人登月、深空探测等重大任务,不仅是我国航天事业的重…

解决mac 扩展屏色温闪烁问题(冷、暖色切换)

关闭原彩显示 即可 如果是此文是转载文章,本人会附上转载链接,此篇文章的版权归原创作者所属,如果侵权请与我联系,我会删除此文。 若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:作者:feiquan出处:http://www.cnblogs.com/feiquan/版权声明:本文版权归…

SSL证书是否可以给多个域名使用?

在当今数字化的网络环境中,SSL证书在保障网站安全、保护用户数据传输方面发挥着至关重要的作用。那么,SSL 证书是否可以给多个域名使用呢?这是一个在网站开发、运营和安全管理领域备受关注的问题。 SSL 证书能够给多个域名使用吗?答案是视情况而定,不同类型的 SSL 证书在多…

OOP实验一

任务1: 源码:1 #include <iostream>2 #include <string>3 #include <vector>4 #include <algorithm>5 using namespace std;6 // 声明7 // 模板函数声明8 template<typename T>9 void output(const T& c); 10 // 普通函数声明 11 void tes…