首页 > 其他 > 详细

【题解】B进制星球

时间:2019-10-08 16:09:41      阅读:98      评论:0      收藏:0      [点我收藏+]

难点:

change()函数的应用

将1-10和26个alphabet打表(所以题目限制才是进制数<=36)

/*
reference:

translation:
    
solution:
    标签中竟然有“高精”,其实就是模拟类似高精的B进制下的进位啦
trigger:
    
note:
    *isdigit()竟然是字符串的函数……
    *英文字母若要表示数字该如何转换
    *记得判断高高位
record:

date:
    2019.09.11 
*/

const int N =2e3+10;
/* 
const char* output="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
*/ 

int a[N],b[N],c[N];
int base;
string s1,s2;

inline int change(char ch){
    if(isalpha(ch))
        return ch-'A'+10;
    else 
        return ch-'0';
}

inline char change_back(int x){
    return 'A'+x-10;
}

int main(){
//  freopen("B.txt","r",stdin);
    rd(base);
    cin>>s1>>s2;
    int len1=s1.length();//千万不能用long long 存,因为位数可能会>64,养成大数用字符串存的习惯 
    int len2=s2.length();
    rep(i,0,len1-1)
        a[i]=change(s1[len1-i-1]);//逆序转存至数组,方便进位
    rep(i,0,len2-1)
        b[i]=change(s2[len2-i-1]);
    int len=max(len1,len2);
    rep(i,0,len-1){
        c[i]+=a[i]+b[i];
        c[i+1]=c[i]/base;
        c[i]%=base;
    } 
    if(c[len])++len;//记得判断 最最高位是否有数,原来的最高位是len 
    dwn(i,len-1,0){
        if(c[i]<=9 && c[i]>=0)
            printf("%d",c[i]);
        else printf("%c",change_back(c[i]));
    }
    return 0;
}
/*
4
123
321
*/
//1110

【题解】B进制星球

原文:https://www.cnblogs.com/sjsjsj-minus-Si/p/11635534.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!