2016.1.25
试题描述
|
给定平面上的两个格点P1=(x1,y1)和P2=(x2,y2),线段P1P2上,除了P1和P2以外一共有多少个格点? |
输入
|
一行包括四个数,分别为x1,x2,y1和y2,两两之间用一个空格分隔。
|
输出
|
输出一个数,表示题目描述的格点的个数。
|
输入示例
|
1 5 11 3
|
输出示例
|
3
|
其他说明
|
数据范围:-10^9<=x1,x2,y1,y2<=10^9
|
算出横坐标差纵坐标差,辗转相除一发,注意判负,还有特殊情况(两点重合)
AC代码:
#include<iostream> using namespace std; long long gcd(long long a,long long b) { if(!b) return a; return gcd(b,a%b); } int main() { int x1,x2,y1,y2; scanf("%d%d%d%d",&x1,&x2,&y1,&y2); long long x=x2-x1,y=y2-y1; if(x<0) x=-x;if(y<0) y=-y; if(!x&&!y) printf("0"); else printf("%lld",gcd(x,y)-1); }