String 奇怪的错误c++;在抛出';标准::逻辑错误';what():基本\u字符串::\u M\u构造null无效
我不明白为什么它会让我明白。如果不难,请给我解释一下。 我使用c++11这个程序应该将两个数字相乘并保存在数组中。 我重新设计了它,但仍然不起作用。请有人给一个答案。因为它必须起作用。如果你有问题,请我写一个评论下面。现在起作用了。谢谢大家String 奇怪的错误c++;在抛出';标准::逻辑错误';what():基本\u字符串::\u M\u构造null无效,string,c++11,String,C++11,我不明白为什么它会让我明白。如果不难,请给我解释一下。 我使用c++11这个程序应该将两个数字相乘并保存在数组中。 我重新设计了它,但仍然不起作用。请有人给一个答案。因为它必须起作用。如果你有问题,请我写一个评论下面。现在起作用了。谢谢大家 #include <iostream> #include<string.h> #include<vector> #include<cmath> #define MAX 5001 using namespace
#include <iostream>
#include<string.h>
#include<vector>
#include<cmath>
#define MAX 5001
using namespace std;
string multiply(string s , string s1)
{
int res[10000] , a[10000] , b[10000];
int length;
if(s.length() > s1.length())
length = s.length();
else
length = s1.length();
memset(a , 0 , sizeof(a));
memset(b , 0 , sizeof(b));
for(int i = 0;i < 10000;i++)
{
if(i > length)
break;
a[i] = b[i] = 0;
//cout<<s[i] << " " << s1[i]<<endl;
if(i <= (int)s.length())
{
if(i < s.length())
a[i] = int(s[s.length() - i-1]) - 48;
}
if(i <= (int)s1.length())
{
if(i < s1.length())
b[i] = int(s1[s1.length() - i-1])- 48;
}
//cout<<a[i] << " " << b[i] << endl;
}
//cout<<endl;
for(int i = 0;i < length+1;i++)
{
//cout<<a[i] << " " << b[i] << endl;
b[i] += a[i];
b[i+1] += b[i] / 10;
b[i] %= 10;
//cout<<b[i] << " " << a[i] << endl;
}
if(b[length] > 0)
length++;
string rez = "";
for(int i = length-1;i >= 0;i--)
{
rez += char(b[i] + 48);
//cout<<b[i];
}
return rez;
}
bool is(long long n)
{
if(n == 0 || n == 1)
{
return false;
}
if(n == 2)
return true;
for(long long i = 2;i <= sqrt(n);i++)
{
if(n % i == 0)
return false;
}
return true;
}
int main()
{string arr[MAX];
vector<string> coins;
arr[0] = "1";
coins.push_back("2");
int n;
cin>>n;
if(n< 12)
cout<<1/0;
cin.get();
for(int i = 3;i <= 5000;i++)
if(is(i))
coins.push_back(to_string(i));
for(int j = 0;j < (int)coins.size();j++)
{
for(int i = 1;i <= n;i++)
if(i >= atoi(coins[j].c_str()))
arr[i] = multiply(arr[i - atoi(coins[j].c_str())] , arr[i]);
}
cout<<arr[n];
//cout<<multiply("2" , "22");
}
#包括
#包括
#包括
#包括
#定义最大5001
使用名称空间std;
字符串乘法(字符串s、字符串s1)
{
int res[10000],a[10000],b[10000];
整数长度;
如果(s.length()>s1.length())
长度=s.长度();
其他的
长度=s1.length();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
对于(int i=0;i<10000;i++)
{
如果(i>长度)
打破
a[i]=b[i]=0;
//你可能想了解和。顺便说一句,当你设置一个向量的大小,然后使用push_back
时,你就增加了向量的大小。你的向量coins
在推完之后可以包含近10000个元素。前5000个是空字符串。@Someprogrammerdude它仍然不起作用(我重新定义了它)你认为行coutLol的错误是什么(cin.get()),因为当我使用custome Input时,我使用了codeschef,而没有使用enter。你可能想了解和。顺便说一下,当你设置向量的大小,然后使用push_back
时,你就增加了向量的大小。在所有的推送之后,向量coins
可以包含近10000个元素。前5000个元素就是empty strings.@Someprogrammerdude它仍然不起作用(我重新编辑了它)你认为行coutLol是什么,错误是(cin.get()),因为我在使用custome输入时使用了codeschef而没有使用enter