HDU 2057

今天做这道A+B的题我把它当成进制转换来做,结果发现网上有更加简单的做法因为printf函数可以以十六进制的形式输出一个数……妈呀没想到这里去又出了几处错,慢慢调试才AC,结果花了两个多小时……。不管了,当复习一下进制转换233333.

献上代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{
   char str_oxa[17]={'0'};
   char str_oxb[17]={'0'};
   while(scanf("%s %s",str_oxa,str_oxb)!=EOF)
   {
       long long int a=0,b=0;
       int i,j;
       for(i=strlen(str_oxa)-1,j=0;i>=0;i--,j++)
       {
           if(str_oxa[i]<='F'&&str_oxa[i]>='A')//十进制转十六进制
           a+=(str_oxa[i]-55)*(long long int)pow(16,j);
           else if(str_oxa[i]<='9'&&str_oxa[i]>='0')
            a+=(str_oxa[i]-48)*(long long int)pow(16,j);//十进制转十六进制
       }
       for(i=strlen(str_oxb)-1,j=0;i>=0;i--,j++)
       {
           if(str_oxb[i]<='F'&&str_oxb[i]>='A')
           b+=(str_oxb[i]-55)*(long long int)pow(16,j);
           else if(str_oxb[i]<='9'&&str_oxb[i]>='0')
            b+=(str_oxb[i]-48)*(long long int)pow(16,j);
       }
       if(str_oxa[0]=='-') a=-a;
       if(str_oxb[0]=='-') b=-b;
       long long int temp_c=a+b,d=0,e=0,k=1;
       long long int c=fabs(temp_c);
       i=0;
       char str_oxc[17]={'0'};
       while(k>0)//转回来
       {
           e=c%16;
           k=c/16;
           if(e<=15&&e>=10) str_oxc[i]=e+55;
           else if(e<=9&&e>=0) str_oxc[i]=e+48;
           c=k;
           i++;
       }//转回来
       i=0;
       if(temp_c<0) printf("-");
       for(i=strlen(str_oxc)-1;i>0;i--)
       printf("%c",str_oxc[i]);
       printf("%c\n",str_oxc[i]);
   }
   return 0;
}

 

posted @ 2018-02-11 15:00  给我的敌人开黑市  阅读(104)  评论(0编辑  收藏  举报