zoukankan      html  css  js  c++  java
  • 十六进制加法

    Problem C 
    
    Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    
    Total Submission(s) : 21   Accepted Submission(s) : 6
    
    Font: Times New Roman | Verdana | Georgia
    
     Font Size: ← →
    
    Problem Description
    
     There must be many A + B problems in our HDOJ , now a new one is coming.
    Give you two hexadecimal integers , your task is to calculate the sum of them,and print it in hexadecimal too.
    Easy ? AC it ! 
    
    Input
    
     The input contains several test cases, please process to the end of the file.
    Each case consists of two hexadecimal integers A and B in a line seperated by a blank.
    The length of A and B is less than 15. 
    
    Output
    
     For each test case,print the sum of A and B in hexadecimal in one line.
     
    
    Sample Input
    
    +A -A
    +1A 12
    1A -9
    -1A -12
    1A -AA
    Sample Output
    
    0
    2C
    11
    -2C
    -90
    
    
    #include<iostream>
    #include<stdio.h>
    #include<cstring>
    using namespace std;
    int main()
    {
        char a[20],b[20];
         __int64 L1,L2,i,sum1,sum2,sum3,j,c[1000];
        while(cin>>a>>b)
        {
            L1=strlen(a);
            L2=strlen(b);
            sum2=sum1=0;
            if(a[0]=='-'||a[0]=='+')
                i=1;
            else
                i=0;
            for(;i<L1;i++)
            {
                sum1*=16;
                if(a[i]>='A')
                    sum1+=a[i]-'A'+10;
                else
                    sum1+=a[i]-'0';    
            }
            if(b[0]=='-'||b[0]=='+')
                i=1;
            else
                i=0;
            for(;i<L2;i++)
            {
                sum2*=16;
                if(b[i]>='A')
                    sum2+=b[i]-'A'+10;
                else
                    sum2+=b[i]-'0';    
            }
            if(a[0]=='-'&&b[0]=='-')
                sum3=-(sum1+sum2);
            else if(a[0]!='-'&&b[0]=='-')
                sum3=sum1-sum2;
            else if(a[0]=='-'&&b[0]!='-')
                sum3=sum2-sum1;
            else
                sum3=sum2+sum1;
            if(sum3>=0)
            {
                for(i=0;;i++)
                {
                    c[i]=sum3%16;
                    if(sum3/16==0)
                    break;
                    sum3=sum3/16;
                }
                for(j=i;j>=0;j--)
                {
                    if(c[j]>9)
                    printf("%I64c",char(c[j]+'A'-10));
                    else
                        printf("%I64d",c[j]);
                }
                printf("\n");
            }
            else
            {
                sum3=-sum3;
                for(i=0;;i++)
                {
                    c[i]=sum3%16;
                    if(sum3/16==0)
                    break;
                    sum3=sum3/16;
                }
                cout<<"-";
                for(j=i;j>=0;j--)
                {
                    if(c[j]>9)
                    printf("%I64c",char(c[j]+'A'-10));
                    else
                        printf("%I64d",c[j]);
                }
                printf("\n");
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    K-means聚类算法
    实现计算出用户间的共同好友和二度好友
    Mysql和Hive实现列转行,类似reduceByKey操作
    Flink两阶段提交概述
    一些推荐算法的面试题
    收藏推荐算法-机器学习相关博客文章
    Notepad++将多行数据合并成一行
    布隆过滤器
    二叉树问题
    海量数据常见面试问题
  • 原文地址:https://www.cnblogs.com/heqinghui/p/2618796.html
Copyright © 2011-2022 走看看