c·c++/c 프로그래밍

큰 16진수의 덧셈

바로이순간 2012. 11. 16. 02:43

#include <stdio.h>

#include <stdlib.h>

int hex2dec(char c) {

    if(c<='9') return c-'0';

    if(c<'G') return c-'A'+10;

    if(c<'g') return c-'a'+10;

    printf("[%c]는 허용되지 않는 16진수입니다.");

    exit(1);

}

int dec2hex(int x) {

    if(x<10) return x+'0';

    else return x-10+'a';

}

int main() {

    int a, b, x, y, z, i=0, n;

    char s1[100], s2[100], s3[100];

    printf("두수입력: ");

    scanf("%s %s", s1, s2);

    i=0;

    while(s1[i]!=0) i=i+1;

    a=i;

    i=0;

    while(s2[i]!=0) i=i+1;

    b=i;

    if(a>b) n=b; else n=a;

    i=0; z=0;

    while(i<n) {

        x=hex2dec(s1[a-i-1]); 

        y=hex2dec(s2[b-i-1]);

        s3[i]=x+y+z;

        z=s3[i]/16;

        s3[i]=s3[i]%16;

        i=i+1;

    }

    while(i<a) {

        x=hex2dec(s1[a-i-1]);

        s3[i]=x+z;

        z=s3[i]/16;

        s3[i]=s3[i]%16;

        i=i+1;

    }

    while(i<b) {

        y=hex2dec(s2[b-i-1]);

        s3[i]=y+z;

        z=s3[i]/16;

        s3[i]=s3[i]%16;

        i=i+1;

    }

    if(z!=0) {

        s3[i]=z;

        i=i+1;

    }

    x=i;

    for(i=0;i<x;++i) printf("%c", dec2hex(s3[x-i-1])); 

     

    return 0;

}