【发布时间】:2018-09-26 01:09:49
【问题描述】:
我正在尝试使用 Devcpp ide 在 Windows 10 上的 C++ 中实现 Karatsuba 乘法算法。这是相同的代码:
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int karatsuba(int x, int y){
string sx = to_string(x);
string sy = to_string(y);
int len_x = strlen(sx);
int len_y = strlen(sy);
if (len_x == 1 && len_y == 1)
return x * y;
else{
int n = max(len_x, len_y);
int n_by_2 = n / 2;
int a = x / pow(10, n_by_2);
int b = x % pow(10, n_by_2);
int c = y / pow(10, n_by_2);
int d = y % pow(10, n_by_2);
int ac = karatsuba(a, c);
int bd = karatsuba(b, d);
int ad_plus_bc = karatsuba(a+b, c+d);
int prod = ac * pow(10, n_by_2) + (ad_plus_bc * pow(10, n_by_2)) + bd;
return prod;
}
}
int main(){
cout<<karatsuba(45, 45);
}
当我运行这个程序时,我得到了这些错误:
C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp 在函数'int karatsuba(int, int)'中: 7 25 C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp [错误] 'to_string' 未在此范围内声明
9 23 C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp [错误] 'strlen' 未在此范围内声明
18 29 C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp [错误] 'int' 和 '__gnu_cxx::__promote_2::__type {aka double}' 类型的无效操作数到二进制 '运算符%'
20 29 C:\Users\AKuro\Desktop\C++\Divide and Conquer\karatsuba.cpp [错误] 'int' 和 '__gnu_cxx::__promote_2::__type {aka double}' 类型的无效操作数到二进制 '运算符%'
我尝试了通过谷歌搜索找到的方法,但它们似乎都不起作用。这是我已经尝试过的:
将 std 与 to_string 一起使用,例如 std::to_string
我什至尝试过这种方法
int i = 1212;
stringstream ss;
ss << i;
string s=ss.str();
但似乎没有一个工作,我找不到这个特定环境的任何答案(Windows 10 + Devcpp)。它一直困扰着我。请帮帮我。
【问题讨论】:
-
您是否在 IDE 中设置了 -std=c++11?
-
您使用什么编译器选项? “似乎没有工作”(任何错误)到底是什么意思?
-
std::string有.size()函数,使用它而不是strlen(仅适用于字符串文字:“qwe”) -
启用c++11
-
... 或者最好只使用
sx.length()
标签: c++ windows c++11 tostring