给定n个数,从这n个数中选取任意两个数做差,并把差赋给其中大的数,重复若干次,直到所有数相等,此时求所有数的和。
这个是辗转相减法的原理,所以用辗转相除法求这n个数的最大公约数,然后乘以n即可。
#include <cstdio>
#include <iostream>
using namespace std;
int num[105] = {0} ;
int gcd(int x , int y) {
return (x % y == 0)? y : gcd(y , x % y) ;
}
int main() {
int n ;
cin >> n ;
for (int i = 0 ; i < n ; i ++) {
cin >> num[i] ;
}
for (int i = 1 ; i < n ; i ++) {
if (num[0] > num[i]) num[0] = gcd(num[0] , num[i]) ;
else if (num[0] < num[i]) num[0] = gcd(num[i] , num[0]) ;
}
cout << num[0] * n << endl ;
return 0 ;
}