标签:大数运算
描述
x
x x
x x x
x x x x
输入
每组测试用例为一个整数N,长度不超100。
输出
样例输入
1
2
3
4
5
11111111
样例输出
1
3
6
10
15
61728399382716
题目来源
南京邮电大学计算机学院首届ACM程序设计大赛(2009)
分析:显然大数运算。不知道怎么个大数,实在想不出,求助百度,都是Java的BigInteger,只好又自己想了。
最后:高斯求和~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(首项+末项)*项数/2。
输入char型数组input[]转换成int数组a[],int数组b[]为a数组加上1得到的。为了方便相乘,数组a和b都是和正常的顺序相反的。
然后a数组和b数组相乘得到数组c。
for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { c[i+j] += a[i] * b[j]; } } for(int i=0; i<2*N-1;i++) { c[i+1] += c[i]/10; c[i] = c[i]%10; }
为了除以2,将数组c倒过来变成正常的顺序,再除以2。
int remainder = 0; // 余数 for(int i=0;i<num;i++) { int tmp = remainder*10 + a[i]; output[i] = tmp / 2; remainder = tmp % 2; }
不过运行时间有点长。。。在想想有什么简便的方法?
暂时没想到
标签:大数运算
原文地址:http://blog.csdn.net/tcherry/article/details/27380513