序列求和 出错的一点心得
来源:互联网 发布:windows 连接ecs 编辑:程序博客网 时间:2024/06/18 14:03
除了大二开始,在校OJ上做过几十道ACM题后,真心虐心,后来变没怎么接触了。今天闲暇时,看了一道菜菜的题,结果被虐了好几遍,大神勿喷。
题目很简单,求1+2+3+...+n的值。
起初,不管三七二十一,就有了以下的代码:
int main(int argc, char* argv[]){long sum =0;long i;long end;scanf("%ld",&end);for(i=1;i<=end;i++){sum+=i;}printf("%ld",sum);return 0;}
很显然,没有AC,很显然注意到了数据规模 1 <= n <= 1,000,000,000。
神码,long int 显然不能满足数据长度了,那就使用64位的int ,在VC6.0里,就用_int64 来定义,OK,测试了下没问题。
提交代码后,报错了!!编译错误。查了下系统用的是GCC编译器。
百度了后,应该这么写
//C/C++中怎样使用64位整数?64位整数的类型定义为:long long使用scanf读的操作为:scanf("%I64d", &x);使用printf写的操作为:printf("%I64d", x);
不过发现我这算法也太渣了。cpu使用843ms,果断想起初中时候数学多项和公式:首项加尾项乘以项数除以2,再改进下:
int main(){long long end;scanf("%I64d",&end);printf("%I64d",(1 + end) * end / 2);return 0;}
CPU使用0ms,完美解决。在VC中定义64位整形_int64,使用long long 则会报错,一种语言的语法和编译器有关,其实也可以理解,在C语言最初,没有64位的机器,到后来出现64位,64位长整形没形成一个统一的标准。很简单的一道题,大神勿喷~ 哈哈
0 0
- 序列求和 出错的一点心得
- 使用FreeMarker生成Word出错的一点心得
- 我的一点心得
- ListBox的一点心得!
- 测试的一点心得
- SplitContainer 的一点心得
- 字符串的一点心得
- Html的一点心得
- Ogame的一点心得
- 写诗的一点心得
- 面试的一点心得
- 调试的一点心得
- Spring的一点心得
- typedef的一点心得
- mysql的一点心得
- DCT的一点心得
- 空间布局的一点心得
- 写秒杀器的一点心得。
- Fire Net zoj BFS的活学活用
- 如何使用XlsReadWriteII在Delphi中读取Excel文件
- WindowAdapter的使用
- eclipse启动无响应,停留在Loading workbench状态
- poi(拓扑排序)
- 序列求和 出错的一点心得
- 电机PID稳定控制
- poj2007极角排序
- hdu 1024 Max Sum Plus Plus(经典dp) 有点小bug?
- iOS_GCD_实战_资源竞争
- Excel读写方案XLSReadWriteII使用技巧总结
- VC++动态链接库(DLL)编程深入浅出(zz)
- 题目1114:神奇的口袋
- C++异常处理