题目描述
小芳有一张n*m的长方形纸片。每次小芳将会从这个纸片里面剪去一个最大的正方形纸片,直到全部剪完(剩下一个正方形)为止。
小芳总共能得到多少片正方形纸片?
输入输出格式
输入格式:
一行两个整数n和m
输出格式:
一行一个整数,总共能得到的纸片数量。
输入输出样例
输入样例#1:
6 4
输出样例#1:
3
说明
对于30%的数据满足n=1
对于60%的数据满足n,m≤10^3
对于100%的数据满足n,m≤10^12
分析:一道比较水的题,如果直接按照题目说的来,每次用大的减小的,就有可能出现n = 10^12,m = 1这样的极端情况,为了避免多次相减,使用除法就好了.
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #include <string> using namespace std; long long n, m, ans; int main() { scanf("%lld%lld", &n, &m); if (n == 1) { printf("%lld ", m / n); return 0; } if (m == 1) { printf("%lld ", n / m); return 0; } else { while (m != 0 && n != 0) { if (m > n) { long long t = m / n; ans += t; m -= t * n; } else if (n > m) { long long t = n / m; ans += t; n -= t * m; } } printf("%lld ", ans); } return 0; }