您的位置:首页 > 其它

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

2014-12-22 22:19 190 查看
C - 郭式树
Crawling in process...Crawling failedTime
Limit:
2000MS Memory Limit:128000KB 64bit IO Format:%lld & %llu

SubmitStatusPractice

ACdream 1061

Description

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

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

不过忘记了ABC从左到右的顺序,他只知道B在A的右方 x 步处(如果 x 为负则B在A的左方 -x 步处),C在A的右方 y 步处(如果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
,s2
;

int a
={0},b
={0},m,n,len,c
={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
='\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");

}

}

}



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: