acm编程题:hdu1018,hdu1019

//1018
//思路:求这个阶乘结果的位数,因为是阶乘结果(乘积)取对数,就相当于对每个对数求和
/* 123456=1.23456*10^5;
log10(123456) = 5.09151;
log10(1.23456 * 10 ^ 5) = log10(1.23456) + log10(10 ^ 5) = 0.09151 + 5;
故int(log10(n)) + 1 就是n的位数*/
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n, test, i, ans;
double t;
cin >> test;
while (test--)
{
cin >> n;
t = 0;
//乘积取对数相当于对数求和
for ( i = 2; i <= n; i++)
{
t += log10(i*1.0);
}
ans = int(t) + 1;
cout << ans << endl;
}

return 0;
}

//1019
//思路:先求出其最大公约数,再根据lcm=a*b/gcd求得最小公倍数
#include<iostream>
#include<cmath>
using namespace std;
//递归求最大公约数
int gcd(int a ,int b)
{
if (a%b==0)
{
return b;
}
return gcd(b, a%b);
}
//两数之积除以gcd就是lcm
int lcm(int a, int b)
{
int temp;
//确保a比b小
if (a>b)
{
temp = a;
a = b;
b = temp;
}
int g = gcd(a, b);
return (a*b / g);
}
int main()
{
int test;
cin >> test;
int n;
int i;
int m;
while (test--)
{
cin >> n;
cin >> m;
int l = lcm(1, m);
for (i = 1; i < n; i++)
{
cin >> m;
l = lcm(l, m);
}
cout << l << endl;
}

return 0;
}

参考博客:https://www.cnblogs.com/zhourongqing/archive/2012/05/07/2487430.html

原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8530246.html

时间: 2024-10-11 17:59:04

acm编程题:hdu1018,hdu1019的相关文章

ACM编程题之矩阵翻转

题目: 晓萌最近在做一个翻转图片的应用,你可能也知道,图片其实是由一个个的点组成的. 于是,晓萌想先做一个可以翻转矩阵的程序,来解决他问题的核心部分. 输入第一行包括由空格分开的整数M.N.T(0<M<200,0<N<200,T=0或1), 其中M和N分别表示待处理矩阵的行数与列数,T为0时表示左右翻转,为1时表示上下翻转. 之后的M行,每行包括由空格分隔的N个整数,依次为输入矩阵的每一行的数据. 输出包括M行N列,每个数字之间用一个空格分隔,表示的是按照要求翻转后的矩阵. 样例输

acm编程题:hdu1012,hdu1017

//1012/*思路:题目的意思就是将正整数(0~9)求阶乘倒数的和,需要设置一个函数用来求阶乘,在main函数中,0~9循环一次,调用阶乘函数求倒数并累加作为和,求出相应的e并输出*/#include<iostream>#include<iomanip>using namespace std;//求n的阶乘的函数int func(int n){ if (n==0||n==1) { return 1; } return n * func(n - 1);}int main(){ in

acm编程题:hdu1021 ,hdu1022,hdu1023

//1021//思路:求出各个fn,再挨个判断其是否能被3整除.#include<iostream>using namespace std;#define N 1000000int f[N];int main(){ int n; int i; f[0] = 1;//%3的结果 f[1] = 2;//也是%3的结果 //注意:如果不直接先%3的话,提交以后就会wrong answer for ( i = 2; i < N; i++) { f[i] = (f[i - 1] + f[i - 2

ACM大赛题 【C++大数相乘】

题     目: 大数相乘,我们常常会遇见几百位长的数字之间相乘的编程题,例如在算法中,ACM大赛题中,下面就是大数相乘的详细过程. 思      路: 模拟相乘法 举例说明: 123*789=97047 原理展示: 计算机计算: . C++源代码: 结果展示:

蘑菇街2016研发工程师在线编程题

传送门 第一题: [编程题] 搬圆桌 现在有一张半径为r的圆桌,其中心位于(x,y),现在他想把圆桌的中心移到(x1,y1).每次移动一步,都必须在圆桌边缘固定一个点然后将圆桌绕这个点旋转.问最少需要移动几步. 输入描述: 一行五个整数r,x,y,x1,y1(1≤r≤100000,-100000≤x,y,x1,y1≤100000) 输出描述: 输出一个整数,表示答案 输入例子: 2 0 0 0 4 输出例子: 1 题解转自:ixiaomo 思路很简单,千万别想复杂了 无论圆桌如何移动,都必须在圆

Airbnb coding面的一道编程题

之前在直播的时候Airbnb负责人说他们的coding题难度不会到dp,我就知道肯定是一些字符串处理啥的编程题了. 果然,Airbnb的coding面是在codePad上手写代码,面试官希望能看到你书写的过程,所以少用本地ide(呵呵,不调试让写编程题是最XX的,所以有些东西你需要及时沟通) 自己给的三四个test case,要求输出对应的结果就行了(比ACM是相当宽松了). 题目是这样的,很简单: 有这样的文本(我转js的字符串了) let str1 = 'rwer321,dad,adas,y

POJ C程序设计进阶 编程题#3:运算符判定

编程题#3:运算符判定 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 两个整数 a 和 b 运算后得到结果 c.表示为:a ? b = c,其中,?可能是加法 +,减法 -,乘法 *,整除 / 或 取余 %.请根据输入的 a,b,c 的值,确定运算符.如果某种运算成立,则输出相应的运算符,如果任何运算都不成立,则输出 error. 例如: 输入: 3,4,5 输出: er

中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机

期末考试编程题 返回 这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 细胞自动机(30分) 题目内容: 这是细胞自动机的非图形版本.细胞自动机是指在一个二维网格内,每一个网格是一个细胞.每个细胞有活和死两种状态. 初始时刻,有些细胞是活的,有些细胞是死的.自动机的每一步,根据每个细胞周围8个格子内的其他细胞的生存情况决定这个细胞下一步是否存活.具体的规则如下:

ACM 刷题小技巧【转】

转载自URl-team ACM做题过程中的一些小技巧. 1.一般用C语言节约空间,要用C++库函数或STL时才用C++; cout.cin和printf.scanf最好不要混用. 大数据输入输出时最好不要用cin.cout,防止超时. 2.有时候int型不够用,可以用long long或__int64型(两个下划线__). 值类型表示值介于 -2^63 ( -9,223,372,036,854,775,808) 到2^63-1(+9,223,372,036,854,775,807 )之间的整数.