问题是在下面的测试用例下面找不到可逆的no.s,这里可逆的no.s意味着像36 + 63 = 99
(包含两个奇数)。
36
和63
都是可逆的。我们必须找到完全可逆的号码
低于数字。
我还将函数声明为inline
,但它仍然给出了超时错误。测试案例#1测试案例#5
inline std::string IntToString ( int number )
{
std::ostringstream oss;
oss<< number;
return oss.str();
}
inline int replacer (int n)
{
int r,R=0;
while(n!=0)
{
r=n%10 ;
R=R*10+r ;
n=n/10;
}
return R ;
}
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int i,n,t,j,R,Q,L,k,d=0,M=0,D;
cin>>t ;
for(i=0;i<t;i++ )
{
M=0;
cin>>n ;
for(j=1;j<n;j++)
{
if(j%10!=0)
{ d=0;
R= replacer(j) ;
Q=R+j ;
std::string C = IntToString (Q);
L=C.size() ;
for(k=0;k<L;k++)
if(C[k]%2==0)
d=1 ;
if(d==0)
M++ ;
}
}
cout<<M<<endl ;
}
return 0;
}
答案 0 :(得分:0)
一个简单的通用答案就是通过让你的代码快速完成任务来解决问题。即通过优化它。
分析工具可以帮助您指出&#34; hot&#34;代码的一部分,但决议必须由你完成。
答案 1 :(得分:0)
您无需拥有字符串即可获取数字的数字。 鉴于您使用流,将int转换为字符串是一项昂贵的操作。 如果你想循环数字的数字,请使用以下代码:
void loopThroughDigits(int n)
{
while(n > 0)
{
int digit = n % 10;
n /= 10;
//do something with digit
}
}
除此之外,您应该考虑存储早期结果并从之前的“检查点”开始计算。我不知道内存限制或最大输入,所以我不确定这是一种可靠的方法。