中间溢出
来源:互联网 发布:旋转门plc编程 编辑:程序博客网 时间:2024/05/16 19:37
例题2-2 3n+1问题 猜想:对于任意大于1的自然数n,若n为奇数,则将n变成3n+1,否则变成一半
经过若干次这样的变换,一定会使n变成1.例如3->10->5->16->8->4->2->1 输入n,输出变换的次数。n≤10^9.
样例输入:3 样例输出:7
粗看没有问题。
int假设是32位,那么最大可取到2^31+1=2147483649,也就是21亿4千7百48万3千6百49,而10^9刚好是10亿,也就是说输入范围没有问题
关键是中间结果 n*3+1可能会溢出
怎么办呢?
1.n用long long存储
2.一个临时的解决方案是:因为n为奇数事3*n+1一定是偶数,下一步将其立刻除以2.如果将两次操作一起做,可以在一定程度上缓解这个问题。
现使用第二种方法
#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ unsigned n, count = 0; scanf("%d", &n); while(n > 1) { if(n % 2 == 1) { n = n + (n+1)/2; count += 2; continue;} else n >>= 1 ; count++; } printf("%d\n", count); system("PAUSE"); return 0;}
0 0
- 中间溢出
- C++中间结果溢出
- 计算两个数的中间值,并且防溢出
- 不使用中间变量交换两个数. 求平均数考虑溢出
- 溢出
- 溢出
- 溢出
- 溢出
- 溢出
- 屏幕中间
- 中间数
- 中间生成
- 屏幕中间
- index_06_01 中间
- 中间容器
- 中间数
- 中间数
- 中间数
- 链表出错记录
- 网页乱版怎么办?添加clear属性禁止浮动
- Android JNI(实现自己的JNI_OnLoad函数)
- C++中的C++关键字浅析
- Java 内存管理与垃圾回收
- 中间溢出
- 黑马程序员 学习笔记之 Object类
- 写word
- 什么样的类需要编写拷贝构造函数
- 五笔新手,打开搜狗五笔输入法自动联想功能
- 网页乱版怎么办?可能是CSS的float属性在捣乱
- struts2的ognl表达式二:支持函数使用
- SimpleDateFormat 线程不安全
- 第二周项目-1