26进制的加法和除法codeforces1144E

it2022-09-24  4

题目链接

给两个长度小于2e5的字符串,找出它们正中间的字符串

这是个模拟题,但是我不知道怎么算,以前没有做过字符串的除法,只知道加法。

这个题要先减去'a'加起来,再除以二加上’a'

进位的时候,大于等于26就往前进位,除的时候如果前一位的数mod2不为0,则加上26再除二

十进制的时候也是一样的

比如1110,从第二个1开始,前面有一个1,所以要加10再除二

对于430,可以看作0430,4,3直接除二,0要加上10再除二,等于215。

#include<iostream> #include<cstdlib> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> #include<set> #include<queue> #include<map> using namespace std; char s[200005],t[200005]; int a[2000005]; int main() { int len,i,j; while(scanf("%d",&len)==1) { scanf("%s",s); scanf("%s",t); memset(a,0,sizeof(a));//初始化 j=1;//a数组下标从1到len for(i=len-1;i>=0;i--)//倒着加 { a[j]+=(s[i]+t[i]-'a'-'a');//26进制加法 if(a[j]>=26) { a[j]-=26; a[j+1]++; } j++; } for(i=len;i>=1;i--) { if(a[i+1]%2==1)//上一位mod 2 不为零 { printf("%c",(a[i]+26)/2+'a');//加上26再除以二 } else printf("%c",a[i]/2+'a'); } printf("\n"); } return 0; }

 

最新回复(0)