Uva11827 (GCD)

这题的难点大致就是读入数据方面了吧。。。


尼玛。。。


一直用不惯C艹的读取系统。。。至今都搞不懂cin啊scanf 啊sscanf 啊gets 啊get 啊getline 啊getchar 啊等等一堆乱七八糟的函数还有后面跟的一队乱七八糟的参数的玩意。。。擦擦擦擦擦擦擦擦擦擦擦。。。


好吧。。。其实可能还是我智商拙计。。。


可是为什么gets那种玩意只能读到char[] 里面啊! 读进string里面会屎么!!!! 还得用string str(char [])这种乱七八糟的东西搞进去!!!!【还是我智商拙计么!!!!


吐槽完毕~~~【empty大神、endless大神、甫神 等人请无视上面几段的东西,其实我内心可可热爱它们了~~~


咳咳……尴尬


我一开始用的是getline 存进string里面,然后通过while循环,当指针位置的字符不等于空格 的时候,将那个字符 减去‘0’ ,加上之前的数乘以10,这样就得到了一个一个数字。

可是这样会有bug……最后一个数会变成0……天知道为毛为毛为毛为毛为毛为毛!!!


然后用了stringstream, 一个一个读出来。


之后用一个for求出最大的最大公约数就行了……


AC Memory : 0KB     Time : 9MS


代码:

#include<cstdio>
#include<iostream>
#include<sstream>
#include<string>
using namespace std;

int num[100], n;
string s;

int gcd(int a, int b)
{
	return b ? gcd(b, a % b) : a;
}

int main()
{
	int t;
	scanf("%d\n", &t);
	while (t--)
	{
		getline(cin, s);
		stringstream ss(s);
		n = 0;
		while (ss >> num[n])
			++n;

        int i, j, maxn = 0;
        for (i = 0; i < n - 1; ++i)
            for (j = i + 1; j < n; ++j)
                maxn = max(maxn, gcd(num[i], num[j]));
		printf("%d\n", maxn);
	}
	return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值