unsigned long long 还是会溢出 请重新考虑
时间: 2023-10-16 09:09:54 浏览: 107
如果使用 unsigned long long 类型的变量来保存 7 的 32 次方,那么的确可能会发生溢出。这时候可以考虑使用高精度计算来解决这个问题。下面是一个使用字符串来进行高精度计算的实现代码:
```c++
#include <iostream>
#include <string>
using namespace std;
string multiply(string a, string b) {
int len1 = a.length(), len2 = b.length();
string result(len1 + len2, '0');
for (int i = len1 - 1; i >= 0; i--) {
int carry = 0;
for (int j = len2 - 1; j >= 0; j--) {
int temp = (a[i] - '0') * (b[j] - '0') + (result[i + j + 1] - '0') + carry;
result[i + j + 1] = temp % 10 + '0';
carry = temp / 10;
}
result[i] += carry;
}
int pos = result.find_first_not_of('0');
if (pos != string::npos) {
return result.substr(pos);
}
return "0";
}
string power_of_7() {
string result = "1";
for (int i = 0; i < 32; i++) {
result = multiply(result, "7");
}
return result;
}
int main() {
cout << power_of_7() << endl;
return 0;
}
```
这里的 multiply 函数实现了两个字符串相乘的功能,power_of_7 函数则使用循环计算 7 的 32 次方,并将结果保存在一个字符串中返回。这样可以避免使用 unsigned long long 类型的变量导致的溢出问题。
阅读全文