ACdreM-1061 郭式树 没文化真可怕

C - 郭式树

Crawling in process...Crawling failedTime Limit:2000MS    Memory Limit:128000KB    64bit IO Format:%lld & %llu

Description

郭橐驼,不知始何名。病偻,隆然伏行,有类橐驼者,故乡人号之驼。驼闻之,曰:“甚善。名我固当。”因舍其名,亦自谓橐驼云。其乡曰丰乐乡,在长安西。驼业种树,凡长安豪富人为观游及卖果者,皆争迎取养。视驼所种树,或移徙,无不活;且硕茂,蚤实以蕃。他植者虽窥伺效慕,莫能如也。   有问之,对曰:“橐驼非能使木寿且孳也,以能顺木之天,以致其性焉尔。凡植木之性,其本欲舒,其培欲平,其土欲故,其筑欲密。既然已,勿动勿虑,去不复顾。其莳也若子,其置也若弃,则其天者全,而其性得矣。故吾不害其长而已,非有能硕而茂之也。不抑耗其实而已,非有能蚤而蕃之也。他植者则不然:根拳而土易。其培之也,若不过焉则不及。苟有能反是者,则又爱之太殷,忧之太勤。旦视而暮抚,已去而复顾;甚者爪其肤以验其生枯,摇其本以观其疏密,而木之性日以离矣。虽曰爱之,其实害之;虽曰忧之,其实仇之,故不我若也,吾又何能为哉?” 

相传郭橐驼又在种树了,他沿着一条笔直的马路种了3棵树A,B,C。

不过忘记了ABC从左到右的顺序,他只知道B在A的右方 步处(如果 x 为负则B在A的左方 -x 步处),C在A的右方 步处(如果y 为负责C在A左方-y 步处)。

他想知道BC距离多少步(答案一定为正数且不为0)。

因为他种的树太多了,他只知道 |x|, |y| (取绝对值, |1| = 1, |-2| = 2) ≤ 4611686018427387904

Input

第一行是数据组数T(T ≤ 100000)

每组数据两个整数 x , y (-4611686018427387904 ≤ x, y ≤ 4611686018427387904)

 

Output

对于每组数据输出一个正数代表BC间的距离

 

 

Sample Input

2
1 2
4611686018427387904 -4611686018427387904

Sample Output

1 
9223372036854775808



在看到其他解答之前并不知道什么long long的范围 以为看到那么长串的数字得用字符串计算了。


于是兴高采烈地码了一大段 调试了半天。

但是并不知道为什么过不了 。。


#include<stdio.h>
#include<string.h>
#define N 20
int main()
{
    int n;
    scanf("%d",&n);getchar();
    for(int j=0;j<n;j++){
    char s1[N],s2[N];
    int a[N]={0},b[N]={0},m,n,len,c[N]={0},f2=1,f1=1;//f1,f2代表两个数的符号
    scanf("%s",&s1);scanf("%s",&s2);
    m=strlen(s1);n=strlen(s2);
    if(s2[0]=='-') {for(int i=0;i<n-1;i++) {s2[i]=s2[i+1];f2=0;s2[i+1]='\0';} n--;} //去掉符号
    if(s1[0]=='-') {for(int i=0;i<m-1;i++) {s1[i]=s1[i+1];f1=0;s1[i+1]='\0';} m--;}
    len=m>n?m:n;//长度
    for(int i=0;i<n;i++)
     b[i]=s2[n-1-i]-'0';//把数字赋到数组中比赋到字符串中方便多了 当时纠结了半天
    for(int i=0;i<m;i++)
     a[i]=s1[m-1-i]-'0';
    
    
    if(f1!=f2){    //符号不同 绝对值相加
    for(int i=0;i<len;i++)
      {
       b[i]+=a[i];
       if(b[i]>=10)
       {b[i]-=10;b[i+1]+=1;}
      }
    if(b[len]==1) len++;
    for(int i=len-1;i>=0;i--)
    c[i]=b[len-1-i];
    for(int i=0;i<len;i++)
    printf("%d",c[i]); 
    printf("\n");
    }
   
   
    else{//符号相同 绝对值相减
   int A=0;
   for(int i=len-1;i>=0;i--)//判断大小
   {
    if(a[i]==b[i]) continue;
    if(a[i]>b[i]) {A=1;break;}       //a>b
    if(a[i]<b[i]) {A=0;break;}
   }
   if(A==0){//如果a<b就交换a,b.
    int temp[len];
    for(int i=0;i<len-1;i++)
    {
     temp[i]=b[i];
     b[i]=a[i];
     a[i]=temp[i];
    }
    a[n]='\0';b[m]='\0';
      }
     for(int i=0;i<len;i++)
     {
      /*if(A==0){              //b-a
      b[i]-=a[i];
      if(b[i]<0)
      {b[i]+=10;b[i+1]-=1;}//b[i+2]='\0';}
      }*/
     // else{                //a-b
      a[i]=a[i]-b[i];
      if(a[i]<0)
      {a[i]+=10;a[i+1]-=1;}
     }
  for(int i=len-1;i>=0;i--)
  {
   c[i]=(A=0?b[len-1-i]:a[len-1-i]);
  }
 
  while(c[0]==0)//去掉数字前边的0
  {
   len--;
   for(int i=0;i<len;i++)
   c[i]=c[i+1];
  }
  for(int i=0;i<len;i++)
  printf("%d",c[i]);
  printf("\n");
  }
   }
}

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值