【有奖】NOIP普及组模拟赛题解(T1角谷猜想)

这题so easy!简单的高精即可AC!

#include <iostream>

#include <string> //字符串
using namespace std;
string a1;
int a[1001],c[1001],s=0,x=0;
int pd()
{
if(a[1]!=1)return 0;
for(int i=2;i<=1000;i++)
if(a[i]!=0)return 0;
return 1;
} //判断这个高精数字是否为1,如果不为1则返回0,为1则返回1
int main()
{
cin>>a1;
for(int i=0;i<a1.size();i++)
a[a1.size()-i]=a1[i]-48; //高精中的字符串处理
while(1==1)
{
if(pd()==1)break;
if(a[1]%2==0)
{
for(int i=1000;i>=1;i--)
{
c[i]=(x*10+a[i])/2;
x=(x*10+a[i])%2;
}
for(int i=1;i<=1000;i++)
a[i]=c[i],c[i]=0;
x=0;
}//当这个数为偶数的时候,做除法处理
else if(a[1]%2==1)
{
for(int i=1;i<=1000;i++)
{
a[i]=a[i]*3+x;
if(a[i]>=10){x=a[i]/10;a[i]%=10;}
else x=0;
}
x=1;a[1]++;
while(a[x]==10)
{
a[x+1]++;
a[x]=0;
x++;
}
x=0;
}//否则做乘法处理
s++; //操作次数+1
}

cout<<s<<endl; //输出

return 0;

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值