大数运算,10进制的大数可以按位运算,为什么26位不可以?
so...
注意结尾的处理,哎,弄了半天才想全;
ac代码:
#include<stdio.h>
#include<string.h>
void add(char *p1,char *p2,char*s) //大数按位加法:
{
char b[210]; //注意修改其大小
int i,n1,n2,tt;
n1=strlen(p1); //取长度,并把长的复制到s,短的复制给b;
n2=strlen(p2);
if(n1<n2)
{
strcpy(s,p2);
strcpy(b,p1);
tt=n1;n1=n2;n2=tt;
}
else
{
strcpy(s,p1);
strcpy(b,p2);
}
strrev(s); //逆转;
strrev(b);
s[n1]='A'; //把s后处理为'0';
for(i=0;i<n2;i++) //按位把b加到s中;
{
s[i]+=(b[i]-'A');
s[i+1]+=((s[i]-'A')/26);
s[i]=(s[i]-'A')%26+'A';
}
for(;i<n1;i++) //把s化为相应进制(处理如10进制计算时9999+1的情况,这时s=999(10))
{
s[i+1]+=((s[i]-'A')/26);
s[i]=(s[i]-'A')%26+'A';
}
s[i+1]='\0';
while(i&&s[i]=='A')//去除多余的前缀('0')(此时只有'0'或0,)
s[i--]='\0';
strrev(s); //逆转;
}
int main ()
{
char a[212],b[212],s[212];
while(scanf("%s%s",a,b)!=EOF)
{
add(a,b,s);
puts(s);
}
return 0;
}