Shirlies
宁静专注认真的程序媛~

这一题摔的有点惨,为嘛?首先是题目看错了,还以为是数据范围的问题,改成__int64,总共wa了两次,在仔细看题目,汗……我应该取模的,好吧,取了模,还是Wa了,额……怎么了,网上翻了别人的代码,哦哦,数据范围有问题,刚才改的时候,又改回成int了,好了,a了。其实这一题蛮简单的,就是找规律……

#include "stdio.h"
#include "math.h"

int main()
{
 int T;
 __int64 n,k;

 scanf("%d",&T);
 while(T--)
 {
  scanf("%I64d",&n);

  k=(__int64)sqrt(2.0*n);

  if((k+1)*k>=2*n)//就是根据一行的末尾的数,然后确定范围的,(k+1)*k/2==n,开方确定k值的范围,再和n比较就行了,修正一下k值
   k--;

  printf("%I64d\n",(n-(k+1)*k/2)%9==0?9:(n-(k+1)*k/2)%9);
 }

 return 0;
}

posted on 2012-02-19 15:33  Shirlies  阅读(459)  评论(0编辑  收藏  举报