我正在写一个代码:
例如:如果我输入字符串" abclmn" - > 979899100108109110 - >折叠功能08109110将数字分成3个数字,如此 - > 081,091,10 - > 81 + 91 + 10 = 182 和182是字符串" abclmn"应该插入哈希表
这是我的代码:
#include<iostream>
#include<cmath>
#include<string>
#include<queue>
using namespace std;
int folding(long int num1)
{
int num;
num=num1%100000000;
int x=num/100000;
int y=(num%100000)/100;
int z=num%100;
int w=(x+y+z)%1000;
return w;
}
int main()
{
string s;
cout<<"input the variable name"<<endl;
cin>>s;
int* a=new int [s.length()];
for (int i=0;i<(s.length());++i)
{
a[i]=(int)s[i];
}
queue<int> q;
for (int i=0;i<(s.length());++i)
{
if (a[i]<10) q.push(a[i]);
else
if ((a[i]>9)&&(a[i]<100))
{
q.push(a[i]/10);
q.push(a[i]%10);
}
else if (a[i]>100)
{
q.push(a[i]/100);
q.push((a[i]%100)/10);
q.push(a[i]%10);
}
}//filling the number in a queue
long int num=0;
for (int i=(q.size());i>0;--i)
{
num=num+(q.front()*pow(10*1.0,i-1));
q.pop();
}
cout<<"the answer"<<folding(num)<<endl;
system("pause");
return 0;
}
我的问题是我不知道字符串会有多长 所以如果字符串过于输出将是一个随机值 那是因为我使用long int作为输出值而且还不够。
对于这种或其他方式,是否有解决方案来获得相同的结果?
感谢您的帮助。
答案 0 :(得分:0)
将该字符串转换为ascii值
然后发送此号码 折叠功能,只取右边的前8位数, 将它分成3个数字,将它们加在一起,然后取3个数字 右边的数字也是
好吧,既然您只对最后8位数感兴趣,我们就不需要将整个字符串转换为ASCII表示形式。 让我们尝试沿着字符串向后遍历并以这种方式构建我们的数字。
int getDigits( std::string s ) {
long long int digits = 0;
int runningLength = 0;
int prevLength = 0;
for ( auto it = s.rbegin(); it != s.rend(); ++it ) {
runningLength += prevLength;
//if digits is a 7 digit number then appending a 3 digit number would overflow an int
digits += (long long int)*it * pow(10, runningLength);
//we have to work out the length of the current digit
//so we know how much we need to shift by next time
int dLength = 0;
for ( int d = *it; d > 0; dLength++, d /= 10 );
prevLength = dLength;
if ( digits >= 100000000 ) break;
}
return digits % 100000000;
}
然后将此数字发送到折叠函数,该函数仅取第8个 右边的数字,将它分成3个数字,将它们加在一起 ,然后从右边的前3位数字
你的代码看起来很好。
如果您使用基数16(并且仅假设可打印的ASCII),将字符串拆分为数字的代码将更加整洁。