【发布时间】:2014-08-10 09:46:46
【问题描述】:
我正在编写自己的类(称为“Longer”),这样它就可以容纳一个没有任何上限的数字,这与 int 不同。我为此使用 std::string 。 我在执行加法时遇到问题。
- 如果我只是添加两个字符串,我无法得到正确的结果。
- 我想过将字符串转换为int,然后执行加法, 但长字符串无法转换为int。
如何定义我自己的添加两个字符串的方式,以便获得所需的结果?代码如下:
更长的.h
#pragma once
#include <string>
class Longer
{
public:
Longer(std::string number);
Longer add(Longer num2);
void print();
private:
std::string number;
};
更长的.cpp
#include "Longer.h"
#include <iostream>
#include <string>
Longer::Longer(std::string num): number(num)
{
}
Longer Longer::add(Longer num2){
return Longer(number+num2.number);
}
void Longer::print(){
std::cout<<number<<"\n";
}
main.cpp
#include <iostream>
#include "Longer.h"
int main(){
Longer num1("123456789101112");
Longer num2("121110987654321");
Longer num3 = num1.add(num2);
num3.print();
}
【问题讨论】:
-
您最好使用数据类型
long long int或unsigned long long int。您不太可能需要比这更长的变量来保存一个数字。还有long double。 -
@Nav 这将如何解决一般问题?它是有界的,就像任何其他内置整数类型一样。
-
@juan:有一段时间我什至想过要创建这样一个程序。但是后来我了解到字符串操作要慢得多,并且关于
long long int等的存在。如果程序员认为用户可能会键入一个异常长的数字,那么我觉得算法应该更专注于将数字拆分成更可行的可以比字符串更快地执行计算的组件(使用数字数据类型),而不是将数字用作字符串并尝试对其执行计算。 -
也许其他一些持有
intmax_t的容器,比如std::vector<intmax_t>会更合适。对于这项工作,String 似乎完全是错误的容器。 -
@Nav 只要您已经在执行字符串操作,您也可以使用动态容器。没有人说这将用于高性能操作。