把string类的八进制数字字符串转为string类的十进制字符串(字符串表示的数字可能会超过long long int的范围)
时间: 2023-06-17 13:04:07 浏览: 94
可以使用字符串模拟加法的方法来实现将八进制数字字符串转为十进制数字字符串。
具体实现步骤如下:
1. 从右往左遍历八进制数字字符串的每个字符,将每个字符转为对应的十进制数字,并将其存储在一个数组中。
2. 从数组的最后一个元素开始向前遍历,对于每个元素,将其乘以$8^k$,其中$k$为该元素在数组中的位置(从0开始计数),并将乘积累加到一个字符串中。
3. 对于步骤2中得到的字符串,使用字符串模拟加法的方法将其转为十进制数字字符串。
下面是代码实现:
```cpp
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
string octalToDecimal(string octal) {
int n = octal.size();
int a[n];
for (int i = 0; i < n; i++) {
a[i] = octal[i] - '0';
}
string decimal = "0";
for (int i = n - 1; i >= 0; i--) {
string temp = to_string(a[i] * pow(8, n - 1 - i));
decimal = addStrings(decimal, temp);
}
return decimal;
}
string addStrings(string num1, string num2) {
string result = "";
int carry = 0;
int i = num1.size() - 1, j = num2.size() - 1;
while (i >= 0 || j >= 0 || carry > 0) {
int sum = carry;
if (i >= 0) sum += num1[i] - '0';
if (j >= 0) sum += num2[j] - '0';
result += to_string(sum % 10);
carry = sum / 10;
i--; j--;
}
reverse(result.begin(), result.end());
return result;
}
int main() {
string octal = "12345";
string decimal = octalToDecimal(octal);
cout << decimal << endl;
return 0;
}
```
在本例中,我们将八进制数字字符串"12345"转化为十进制数字字符串"5349"。
阅读全文