问题描述: 就是个求最小公约数的问题。 

  代码如下:

 

#include <iostream>
using namespace std;

long maxCom(long a,long b){
while((a-b)!=0){
if(a>b) a=a-b;
else b= b-a;
}
return a;
}

int main(){
long n,a;
while(cin>>n>>a){
for(int i=0;i<n;i++){
long tmp =0;
cin>>tmp;
if(tmp<=a) a+=tmp;
else{
long res =maxCom(a,tmp);
a+=res;
}
}
cout<<a<<endl;
}

return 0;
}

  注意,需要使用long,否则可能造成数据泄露。 

  求最小公约数的方法: 作差法穷举法辗转相除法;  这里使用的是最简单的作差法

while(cin>>n)用于阻塞式接收信号时,char型是不能满足根据输入值判断的。!!,int,long型可以根据输入的型号进行判别