进制转换

 1 /*
 2     A-10 B-11 C-12 D-13 E-14 F-15
 3  */
 4 #include <stdio.h>
 5 #include <string.h>
 6 #include <math.h>
 7 struct number{
 8     int sign;   /* 1 --> positive number;
 9                    0 --> negative number;
10                 */
11     __int64 num;
12 };
13 number change(char str[]){
14     __int64 tmp=0;
15     number res;
16     res.num=0;
17     int len=strlen(str);
18     __int64 i,j;
19     if(str[0]=='+'||str[0]=='-'){
20         if(str[0]=='+') res.sign=1;
21         else            res.sign=0;
22         for(i=1;i<len;++i){
23             if(str[i]>='0'&&str[i]<='9'){
24                 tmp=str[i]-'0';
25             }else tmp=str[i]-'A'+10;
26             res.num+=tmp*(int)pow(16.0,double(len-1-i));
27         }
28     }else{
29         res.sign=1;
30         for(i=0;i<len;++i){
31             if(str[i]>='0'&&str[i]<='9'){
32                 tmp=str[i]-'0';
33             }else tmp=str[i]-'A'+10;
34             res.num+=tmp*(int)pow(16.0,double(len-1-i));
35         }
36     }
37     return res;
38 }
39 int change_sign(number a){
40     if(a.sign==1) return a.num;
41     else          return 0-a.num;
42 }
43 void put_h(int num){
44     __int64 t,cnt=0;
45     int tmp[10000];
46     if(num<0) putchar('-'),num=-num;
47     do{
48         tmp[cnt++]=num%16;
49         num/=16;
50     }while(num);
51     while(cnt--&&cnt>=0){
52         if(tmp[cnt]>9) putchar('A'+tmp[cnt]-10);
53         else           putchar('0'+tmp[cnt]);
54     }
55     putchar('
');
56 
57 }
58 int main(){
59     char a[10000],b[10000];
60     __int64 A,B;
61     while(~scanf("%s%s",a,b)){
62         A=change_sign(change(a));
63         B=change_sign(change(b));
64         printf("res=%d
",A+B);
65         put_h(A+B);
66     }
67     return 0;
68 }
原文地址:https://www.cnblogs.com/symons1992/p/3403610.html