XidianOJ 1003 亮亮做加法

其实就是高精度,只需要稍微一点改进 

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int getNum(char ch){
    if (isdigit(ch))
        return ch - '0';
    else 
        return ch + 10 - 'A';
}
char getCh(int num){
    if (num >= 10) {
        return 'A' + num - 10;
    }
    else
        return num + '0';
}
void Cal(char*s1,char*s2,int b){
    char res[100];
    int len1 = strlen(s1),len2 = strlen(s2);
    
    int i,total = 0,i1 = len1 - 1,i2 = len2 - 1,x = 0;
    while (i1 >= 0) {
        int a1,a2;
        a1 = getNum(s1[i1]);
        a2 = getNum(s2[i2]);
        res[total] = getCh((a1 + a2 + x) % b);
        x = (a1 + a2 + x) / b;
        
        i1 --;
        i2 --;
        total ++;
    }
    
    while (i2 >= 0){
        int a;
        a = getNum(s2[i2]);
        res[total] = getCh((a + x) % b);
        x = (a + x) / b; 
        i2 --;
        total ++;
    }
    if (x > 0){
        res[total] = '1';
        total ++;
    }
    
    for (i=total-1;i>=0;i--){
        printf("%c",res[i]);
    }
    printf("
");
}

int main(){
    int b;
    char s1[100],s2[100];
    while (scanf("%d %s %s",&b,s1,s2)!=EOF){
        int res[100];
        int len1 = strlen(s1),len2 = strlen(s2);
        
        if (len1 < len2) {
            Cal(s1,s2,b);
        }
        else {
            Cal(s2,s1,b);
        }
    }
    
    return 0;
} 
原文地址:https://www.cnblogs.com/ToTOrz/p/6059931.html