HDU 1099 数学计算
2012-09-13 11:01
295 查看
这是一到简单题,但是题意比较难以理解!说白了就是求n/1+n/2+n/3+----+n/n!这道题就是直接求解,先利用同分的思想,即最小公倍数求出所有的的分母的最小公倍数!然后进行分数的求和!注意分子和分母的没有相除之前需要注意范围超过了整形
#include <iostream> using namespace std; _int64 gcd(_int64 a,_int64 b) { if(b==0) return a; else return gcd(b,a%b); } int main() { int i,n,size1,size2; _int64 number,n1,n2; _int64 integer;//整数部分 _int64 fenzi;//分子 _int64 fenmu;//分母 _int64 a[23];//a 表示输入为n时,从1到n这些数的最小公倍数 a[1]=1; for(i=2;i<=22;i++) a[i]=i*a[i-1]/gcd(i,a[i-1]);//两个数的最小公倍数等于这两个数的乘机除以他们的最大公约数 while(cin>>n) { fenzi=0; for(i=1;i<=n;i++) fenzi += a /i; fenzi *= n; number = gcd(fenzi,a ); //分子分母的最大公约数 fenzi = fenzi/number; //约分后的分子 fenmu = a /number; //约分后的分母 integer = fenzi/fenmu; //结果的整数部分 fenzi = fenzi-integer*fenmu; //最终结果的分子 if(fenzi==0) { printf("%I64d\n",integer); continue; } size1=size2=0; //size1,size2分别为整数部分的位数和分子的位数 n1=integer; n2=fenmu; while(n1!=0) { size1++; n1/=10; } while(n2!=0) { size2++; n2/=10; } //按题目要求的格式打印结果 for(i=0;i<=size1;i++) printf(" "); printf("%I64d\n",fenzi); printf("%I64d ",integer); for(i=0;i<size2;i++) printf("-"); printf("\n"); for(i=0;i<=size1;i++) printf(" "); printf("%I64d\n",fenmu); } return 1; }
相关文章推荐
- hdu 4510 (数学 时间计算)
- hdu 1994 利息计算 (数学)
- HDU-5858 Hard problem(数学公式、计算几何)
- hdu 1099 数学
- hdu 1466 计算直线的交点数 (数学)
- hdu 1099(数学)
- hdu 1466 计算直线的交点数 (数学)
- HDU1060 数学方法实现超大数计算
- HDU 1994 利息计算 数学题
- HDU 4438 Hunters (数学,概率计算)
- hdu 1141 Factstone Benchmark(数学:计算)
- hdu 1994 利息计算 (数学)
- hdu 1466 计算直线的交点数(递推+数学)
- HDU 5734 Acperience 【数学计算】
- hdu 4465 Candy 数学期望 负二项分布与 数值计算技巧
- HDU 6206 Apple (数学 高精度计算)
- hdu 4790 Just Random (思路+分类计算+数学)
- HDU 1099 Lottery (数学问题模拟)
- HDU2551 竹青遍野【数学计算+水题】
- HDU 4488 Faulhaber’s Triangle (数学题)