问题如下
描述
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。
输入
一个正整数N(N <= 2,000,000)
输出
从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End"。如果输入为1,直接输出"End"。
样例输入
5
样例输出
5*3+1=16 16/2=8 8/2=4 4/2=2 2/2=1 End
这个题目并不难,思路很容易想,while套两个if语句,可是我提交四五次都是Output Limit Exceed,我检查了一遍又一遍,打开了csdn看了看(借鉴)别人的文章,把int换成longlong就可以了(long应该也可以)。
Output Limit Exceed(输出超出限制)
你的程序输出了过多的东西,甚至超出了评判系统为了自我保护而设定的被评判程序输出大小的最高上限。
一般来说这种错误并不常见,一旦出现了也很好找原因。要么就是你在提交时忘记关闭你在调试时输出的调试信息(比如输出DP时的数组来动态的观察状态的转移);要么就是程序的输出部分出现了死循环,使得程序不断地输出而超出系统的限制。
#include<iostream>
#include<cstdio>
#include<iomanip>
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a,b,c,d,i;
cin>>a;
while(a!=1)
{
if(a%2!=0) {cout<<a<<"*"<<3<<"+"<<1<<"="<<3*a+1<<endl;a=3*a+1;}
else {cout<<a<<"/"<<2<<"="<<a/2<<endl;a=a/2;}
}
cout<<"End";
}