杭电2100

大数运算,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;
}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值