C 列一列
题意:小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An。输入数列中的某一项,输出该项是是数列的第几项。
思路:这里用的是取模来存的思想,Hash一样来存。
对于unsigned整型溢出,C的规范是有定义的——“溢出后的数会以2^(8*sizeof(type))作模运算”,也就是说,如果一个unsigned char(1字符,8bits)溢出了,会把溢出的值与256求模。
对于signed整型的溢出,C的规范定义是“undefined behavior”,也就是说,编译器爱怎么实现就怎么实现。对于大多数编译器来说,算得啥就是啥。
让它自然溢出就相当于取模了,这里很迷,long long 溢出后似乎也是取模的,试了一下似乎是这样的。
不行的话就用1e9+7来模,不过似乎会有冲突,可以特判或者找两个数来模,如果两个结果都符合的话,就可以了。
long long f[1000010];
char a[100010];
void init()
{
f[1]=1;f[2]=2;
for(int i=3;i<=1000000;i++)
{
f[i]=f[i-2]+f[i-1];
//printf("%lld ",f[i]);
}
}
int main()
{
init();
while(scanf("%s",a)!=EOF)
{
long long aa=0;
for(int i=0;i<strlen(a);i++)
aa=aa*10+a[i]-'0';
for(int i=0;i<=1000000;i++)
if(f[i]==aa)
{
printf("%d\n",i);
break;
}
}
return 0;
}
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!