本文共 517 字,大约阅读时间需要 1 分钟。
子序列的和(subsequence)
输入两个正整数n<m<10^6,输出1/n^2 + 1/(n+1)^2 + …… + 1/m^2,保留5位小数。输入包含多组数据,结束标记为n=m=0。提示:本题有陷阱。 样例输入: 2 4 65536 655360 0 0 样例输出: Case 1: 0.42361Case 2: 0.00001
一,注意事项(关于大整数相乘溢出问题):
#includeint main(){ int n; long long int n_2; scanf("%d",&n); n_2 = n * n; printf("%lld", n_2); return 0;}
这里假设n = 111111,则111111*111111为11位的,,,虽然小于long long的64位,,,但是n*n由于两个乘数为int,最后的结果依然会用int(10位)表示,纵然式子的左边是long long,依然会溢出。。。
虽然网上说强制转换可以解决问题,即n_2 = (long long)n * n;但我的电脑上的编译器会显示栈溢出。最保险的方法就是把乘数也设成long long.
转载地址:http://rxlwz.baihongyu.com/