大家好,我是小黄呀
一giao我哩个giao,全英文的题目,勉强看懂
题目大意
给了一个最大有1000
位的二进制数N
,将这个数扩大17
倍,再输出二进制结果。
没错,是1000位!
思路分析
显然,1000位高精度也做不了,用大数
- 用
sring
来进行存储 - 扩大
17
倍,可以看做扩大16
倍后再加上一个自身,其中扩大16
倍,可以在末尾补4个‘0’
,然后再模拟加法。
具体代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin>>a;
string ans=a+"0000";//乘16
a="0000"+a;//补四位对齐进行模拟加法运算
int len=ans.size();
int temp=0;//进位
for(int i=len-1;i>0;i--)//模拟加法
{
if((a[i]-'0')+(ans[i]-'0')+temp<2)//不够进位
{
ans[i]=(a[i]-'0')+(ans[i]-'0')+temp+'0';
temp=0;
}
else //进位
{
ans[i]=(a[i]-'0')+(ans[i]-'0')+temp+'0'-2;
temp=1;
}
}
if(temp==1)//最高位产生进位时,要在最高位前补1,总位数增加
{
ans[0]='0';
ans = "1"+ans;
}
cout<<ans<<endl;
return 0;
}