ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

UVA11547 Automatic Answer 题解

2021-12-23 20:36:08  阅读:150  来源: 互联网

标签:10 7492 题解 UVA11547 315n 498 Answer 十位数 leqslant


Content

题面扯了一大堆空话。

真正的题意是:有 \(T\) 个询问,每次给出一个数 \(n\),求出 \((567n\div 9+7492)\times235\div47-498\) 的十位数。

数据范围:\(1\leqslant T\leqslant 100,-1000\leqslant n\leqslant 1000\)。

Solution

我们考虑把这个式子化简:

\((63n+7492)\times235\div47-498\)

\(=(63n+7492)\times5-498\)

\(=315n+37460-498\)

\(=315n+36962\)

所以,真正要求的东西就是这个式子:\(315n+36962\)。

那么如何求一个数的十位数呢?

很显然,设一个数是 \(x\),答案就是 \(|\left\lfloor\dfrac{x}{10}\right\rfloor\mod10|\)。

为什么?

因为在整除完 \(10\) 以后,得到的数就没有原来的数的个位数了,所以这时候再取模,相当于将前面所有的数位全部去除掉,只剩下我们要求的十位数。

特别注意负数的时候,因为十位数一定是一个非负整数,一定要取绝对值再去求。

所以,本题的答案就是 \(|\left\lfloor\dfrac{315n+36962}{10}\right\rfloor\mod10|\)。

Code

#include <cstdio>
#define abs(x) x < 0 ? -x : x 
using namespace std;

inline int g() {
	int f = 1, x = 0;
	char c = getchar();
	while(c < '0' || c > '9') {
		if(c == '-')	f = -1;
		c = getchar();
	}
	while(c >= '0' && c <= '9') {
		x = x * 10 + c - '0';
		c = getchar();
	}
	return x * f;
}

int main() {
	int T = g();
	while(T--) {
		int x = g();
		printf("%d\n", abs((315 * x + 36962) / 10 % 10));
	}
	return 0;
}

标签:10,7492,题解,UVA11547,315n,498,Answer,十位数,leqslant
来源: https://www.cnblogs.com/Eason-AC/p/15725112.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有