我应该从控制台屏幕上获得两个大整数(最大600位),然后将结果再次写入控制台。
我定义了两个std :: string类型的变量来存储两个大整数。我从用户那里获取它们的值。为了将这两个数字相加,我定义了两个向量来存储两个数字串的数字。
这是问题所在,当我尝试遍历向量以打印从数字字符串中提取的数字时,会得到以下结果。数字的Ascii值打印在控制台上。 谁能告诉我如何解决此问题。
注意:代码仍不完整。
对于第一个字符串,我从用户那里获取了数字9 8 7 6 5 4 3 2 1,在控制台窗口上,我得到了以下结果。
[0] 57
[1] 56
[2] 55
[3] 54
[4] 53
[5] 52
[6] 51
[7] 50
[8] 49
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
std::string Sum_Of_Two_Long_Integers()
{
std::string First_String ;
std::string Second_String ;
std::string Result_String ;
std::cout << "Please enter the first number: " ;
std::getline(std::cin, First_String);
std::cout << "Please enter the second number: " ;
std::getline(std::cin, Second_String);
std::vector <int> First_String_Vector (First_String.length()) ;
std::vector <int> Second_String_Vector (Second_String.length()) ;
for(int Counter = 0 ; Counter < First_String_Vector.size() ; ++ Counter)
{
First_String_Vector[Counter] = First_String[Counter] ;
Second_String_Vector[Counter] = Second_String[Counter] ;
std::cout << "[" << Counter << "]" << First_String_Vector[Counter] << std::endl ;
}
return Result_String ;
}
int main()
{
std::string Result_String = Sum_Of_Two_Long_Integers() ;
std::cout << "Result = " << Result_String << std::endl ;
return 0 ;
}
答案 0 :(得分:0)
First_String_Vector[Counter] = First_String[Counter] ;
Second_String_Vector[Counter] = Second_String[Counter] ;
数字以ASCII形式存储在字符串中,在将其放入向量之前,应将其转换为整数。
这可以解决问题:
First_String_Vector[Counter] = First_String[Counter] - '0';
Second_String_Vector[Counter] = Second_String[Counter] - '0';
在填充矢量之前,我还会添加对有效输入的检查,以确保只读取数字:
if(First_String[Counter] < '0' || First_String[Counter] > '9' ||
Second_String[Counter] < '0' || Second_String[Counter] > '9')
{
std::cout << "Invalid input\n";
return "":// Or better throw an exception
}
编辑:'6'
不等于6
。第一个是字符,其值是字符“ 6”的ASCII,第二个是整数6。
ASCII是一种编码。字符映射到一些数字。值“ 0”为48,“ 1”为49,...,“ 9”为57
更精确地说,C ++不能保证使用ASCII编码(尽管我不知道不使用ASCII编码的实现),但是可以保证'0'...'9'具有连续的整数价值观。因此'6' - '0'
将给我们整数6。