4 条题解
-
1
#include<bits/stdc++.h> using namespace std; int main() { long long a,b; cin>>a>>b; long long jieguo=1; bool m=false; if(a==1){ cout<<1; return 0; } for(long long i=0;i<b;++i) { jieguo*=a; if(jieguo>1000000000) { m=true; break; } } if(m){ cout<<-1<<endl; }else{ cout<<jieguo<<endl; } return 0; } -
1
#include <bits/stdc++.h> using namespace std; int main() { int a, b; cin >> a >> b; const long long MAX = 1000000000LL; long long result = 1; if (a == 1) { cout << "1" << endl; return 0; } for (int i = 0; i < b; ++i) { result *= a; if (result > MAX) { cout << "-1" << endl; return 0; } } cout << result << endl; return 0; }快速模式 回答完成 这段代码是一个简单的C++程序,用于计算a的b次方,并处理一些特殊情况。我来帮你分析一下:
代码功能: 输入两个整数a和b 计算a的b次方 如果结果超过10亿(1e9),输出-1 特殊情况:当a=1时,直接输出1(因为1的任何次方都是1) 代码分析: 定义了一个常量MAX=1000000000(10亿) 如果a等于1,直接输出1并结束程序 使用for循环进行b次乘法运算 每次乘法后检查是否超过MAX,如果超过立即输出-1并结束 如果循环正常结束,输出计算结果 可能的改进: 可以添加对b=0情况的处理(任何数的0次方是1) 可以添加对a=0情况的处理(0的正数次方是0,0的0次方未定义) 可以添加对负数的处理(虽然题目可能限定了输入范围)
-
0
#include <bits/stdc++.h> using namespace std; #define int long long double logN(double x, double n) { return log(x) / log(n); } signed main() { ios::sync_with_stdio(false), cin.tie(0); int a, b; int sum = 1; cin >> a >> b; if (a == 1) return cout << 1, 0; // 判断a是不是一,如果是1,直接输出,否则BOOOOOOM!!!!!! if (logN(1000000000, a) < b) return cout << "-1", 0;// 反着的思路,若乘方 < log_a(1000000000)就行了 else { for (int i = 1; i <= b; i++) sum *= a; } cout << sum; return 0; }
- 1
信息
- ID
- 969
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 795
- 已通过
- 21
- 上传者