给定一个由超过 100 位数字组成的字符串str形式的整数N ,任务是存储执行算术运算的值并打印给定的整数。
例子:
Input: str = “54326789013892014531903492543267890138920145319034925432678901389201”
Output: 54326789013892014531903492543267890138920145319034925432678901389201
Input: str = “7890138920145319034925432678907890138920145319034925432678901903492543267890”
Output: 7890138920145319034925432678907890138920145319034925432678901903492543267890
方法:
C++ 中不存在数据类型来存储10 100 。因此,我们的想法是使用 get 输入作为字符串(因为字符串可以是任何长度),然后将此字符串转换为长度与字符串长度相同的数字数组。将大整数存储到整数数组中将有助于对该数字执行一些基本算术。
以下是步骤:
- 将大数作为输入并将其存储在字符串。
- 创建一个长度与字符串大小相同的整数数组arr[] 。
- 一一迭代字符串str 的所有字符(数字)并将这些数字存储在数组arr的相应索引中
arr[i] = str[i] – ‘0’;
// Here ‘0’ represents the digit 0, and
// str[i] – ‘0’ = ASCII(str[i]) – ASCII(‘0’) = ASCII(str[i] – 48 - 使用上述步骤,我们可以存储非常非常大的数字以进行任何算术运算。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to return dynamic allocated
// array consisting integers individually
int* GetBigInteger(string str)
{
int x = str.size(), a = 0;
// Create an array to store the big
// integer into it.
// Make the array size same as the
// size of string str
int* arr = new int[str.size()];
// Loop to extract string elements
// into the array one by one
while (a != x) {
// Subtracting '0' to convert
// each character into digit
// str[a] - '0'
// = ASCII(str[a]) - ASCII('0')
// = ASCII(str[a] - 48
arr[a] = str[a] - '0';
a++;
}
// Return the reference of the array
return arr;
}
// Driver Code
int main()
{
// Big Integer in form of string str
string str = "12345678098765431234567809876543";
// Function Call
int* arr = GetBigInteger(str);
// Print the digits in the arr[]
for (int i = 0; i < str.size(); i++) {
cout << arr[i];
}
return 0;
}
12345678098765431234567809876543
时间复杂度: O(K) ,K 是数字中的位数
辅助空格: O(K) ,K是数字中的位数