记录一下全网最傻逼 最弱智的写法(然而ac的那一刻竟然感动得有点想流泪)
这道题是求两个十六进制数的和,可以直接通过十六进制输入输出来做,可以说是十分水了。
一开始不知道可以这么操作,硬是转成了十进制,再转为十六进制。十分傻逼,引以为戒,以后好好学习,不然……会更秃的。
emmm 不过还是熟悉了一下进制的转换 挺好的(企图掩盖悲伤)
#include <iostream>
#include <stdio.h>
#include <string>
#include <cmath>
using namespace std;
int main()
{
long long hexToDec(string str);//可能是很大的数 用long long存(这里很容易漏掉的)
void dexToHex(long long num);
string str1,str2;
while(getline(cin,str1,' ')&&getline(cin,str2)){//getline从键盘读取存入str1,2 分别以空格 换行符结束 不需要getchar
long long sum=hexToDec(str1)+hexToDec(str2);//转换为十进制相加
if(sum<0) {
cout<<"-";
dexToHex(abs(sum));
}
else dexToHex(sum);
cout<<endl;
}
}
long long hexToDec(string str){
bool isNega=false;//是否为负
int len;//有效数据长度
long long hex=0;
char *p;//指向有效数据 即过滤掉-+
if(str[0]=='+'){
len=str.length()-1;
p=&str[1];
}
else if(str[0]=='-'){
len=str.length()-1;
p=&str[1];
isNega=true;
}
else {
len=str.length();
p=&str[0];
}
for(int i=0;i<len;i++){
long long sum=1;//16的幂
int num;//每一位上的数值
if(*(p+i)>='0'&&*(p+i)<='9')
num=*(p+i)-'0'+0;
else if((*(p+i)>='A'&&*(p+i)<='F'))
num=*(p+i)-'A'+10;
if(num==0) continue;
for(int j=0;j<len-i-1;j++)
sum = sum*16;
hex+=sum*num;
}
if(isNega) return 0-hex;
else return hex;
}
void dexToHex(long long num){
char c;
if(num%16>9) c=char(num%16-10+'A');
else c=char(num%16+'0');
if(num/16==0) cout<<c;
else {
dexToHex(num/16);
cout<<c;
}
}
下面是直接用16进制输入输出的写法:
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
__int64 a,b,sum;
while(scanf("%I64X%I64X",&a,&b)!=EOF){//%X用于十六进制的数输入输出 I64数的范围更大
sum=a+b;
if(sum>=0) printf("%I64X\n",sum);
else printf("-%I64X\n",0-sum);//十六进制 转为正数输出后再加上-
}
return 0;
}