3n+1 问题
来源:互联网 发布:如何在淘宝上找客服 编辑:程序博客网 时间:2024/05/17 13:07
3n+1 问题
代码块
题目中给出n的范围是<=10^9,
第一次定义n时: int n;
当输入987654321时,输出1;
这样显然是错误的
//错误代码#include<iostream>#include<math.h>using namespace std;int main(){ int n; int count=0; scanf("%d",&n); while(n>1) { if(n%2==1) n=n*3+1; else n/=2; count++; } printf("%d\n",count); return 0;}
//调试代码#include<iostream>#include<math.h>using namespace std;int main(){ int n; int count=0; scanf("%d",&n); while(n>1) { if(n%2==1) n=n*3+1; else n/=2; count++; printf("%d",n); } printf("%d\n",count); return 0;}
当输入987654321时,输出 -13320043321;
这是明显的乘法溢出问题
int 整数的大小是:-2147483648~2147483648 即:-2^31~2^31-1之间
然而题目中的n的值的范围在10^9,所以会溢出
为了解决这一问题
我们把int改成long long int即可
long long的范围是 -2^63~2^63-1;
那么在输入时,也要把%d改写成%lld
//正确代码#include<iostream>#include<math.h>using namespace std;int main(){ long long int n; int count=0; scanf("%lld",&n); while(n>1) { if(n%2==1) n=n*3+1; else n/=2; count++; } printf("%d\n",count); return 0;}
阅读全文
0 0
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1问题
- 3n+1 问题
- UVa 3n+1 问题
- dict,set,list,tuple应用详解
- Java知识:LinkedHashMap详解
- [Java基础]深入探讨String、StringBuffer与StringBuilder的区别
- windows 开机启动选项配置
- java中的包装类
- 3n+1 问题
- c语言实现文件拷贝命令
- C#(.net)连接SQLite数据库[附驱动资源]
- 第四周之于石头哥+模式化
- 变量的解构赋值
- 欢迎使用CSDN-markdown编辑器
- tf.nn.conv2d中stride对输出的影响
- 使用基本servlet技术生产图片验证码
- 微信JS-SDK说明文档