A + B Again【题解】附上不同进制数从键盘输入输出格式要求

 

 

 

说实话这道题中的挺无语的,本来可以是水题,但是当时写的时候就想的比较复杂,long long 数据类型本来就包过符号,我把它想成那个用字符串型,把题目复杂化了

题目链接:A+B Again

AC代码:

【c实现】

#include<iostream>
using namespace std;
typedef long long ll;
int main()
{
	ll a,b;
	while(~scanf("%llX%llX",&a,&b))
	{
		if(a+b>=0)
		printf("%llX",a+b);
		else
		printf("-%llX",-(a+b)); 
		cout<<endl;
	}
	return 0;
}

【C++】:

#include<iostream>
#include<iomanip>
using namespace std;
typedef long long ll;
int main()
{
	ll a,b;
	while(cin>>hex>>a>>b)
	{
		if(a+b>=0)
	        cout<<hex<<uppercase<<a+b<<endl;
		else
		    cout<<hex<<uppercase<<'-'<<-(a+b)<<endl;
	}
	return 0;
}

可以通过字符串来处理:但是我失败了;有一个朋友成功了,附上代码:

#include<stdio.h>
#include<string.h>
long long fun1(char *a)
{
 long long b=0,len,i=0;
 len=strlen(a);
 if(a[0]=='-'||a[0]=='+')
 {
  i=1;
 }
 while(i!=len)
 {
  if(a[i]<'0'||(a[i]>'9'&&a[i]<'A')||a[i]>'Z')
   i++;
  b=b*16;
  switch(a[i])
  {
   case 'A':b=b+10;break;
   case 'B':b=b+11;break;
   case 'C':b=b+12;break;
   case 'D':b=b+13;break;
   case 'E':b=b+14;break;
   case 'F':b=b+15;break;
   default:b=b+a[i]-48;
  }
  i++;
 } 
 
 if(a[0]=='-')
  b=b*(-1);
 return b;
}

void fun2(long long num)
{
 char b[17];
 int i,j;
 i=-1;
 if(num<0)
 { printf("-");
  num=num*(-1);
  }
 if(num==0)
  printf("0\n");
 
 else
 {
 while(num/16)
 {i++;
  switch(num%16)
  {
   case 10:b[i]='A';break;
   case 11:b[i]='B';break;
   case 12:b[i]='C';break;
   case 13:b[i]='D';break;
   case 14:b[i]='E';break;
   case 15:b[i]='F';break;
   default:b[i]=num%16+48;
  }
  num=num/16;
 }
 if(num%16!=0)
 {i++;
 switch(num%16)
  {
   case 10:b[i]='A';break;
   case 11:b[i]='B';break;
   case 12:b[i]='C';break;
   case 13:b[i]='D';break;
   case 14:b[i]='E';break;
   case 15:b[i]='F';break;
   default:b[i]=num%16+48;
  }
 }
 for(;i>=0;i--)
  printf("%c",b[i]);
 printf("\n");
 }
}
int main()
{
 char a[16],b[16];
 while(~scanf("%s %s",a,b))
 {
  long long num;
  num=fun1(a)+fun1(b);
  fun2(num);
 }
 return 0;
}

不得不说这个大佬的基本功,太强了;

下面附加不同进制数从键盘输入:

【c++】:

默认进制

cin or cout在默认情况下按照十进制输入输出

八进制

要使输入为八进制数,首先切换至八进制输入

cin >> oct;
//接下里就可以输入八进制数了
cin >> a; // a 是八进制数

十六进制

要使输入为十六进制数,首先切换至十六进制输入

cin >> hex;
//接下里就可以输入十六进制数了
cin >> a; // a 是十六进制数

转换回十进制

要使输入为十进制数,首先切换至十进制输入

cin >> dec;
//接下里就可以输入十进制数了
cin >> a; // a 是十进制数

 最后附加代码验证:

//  八进制:

#include<iostream>
#include<iomanip>
using namespace std;
typedef long long ll;
int main()
{
	ll a,b;
	while(cin>>oct>>a>>b)
	{
	        cout<<oct<<a+b<<endl;
	}
	return 0;
}

4 6
12
4 7
13
6 7
15
7 7
16
17 16
35


//  ps:默认是十进制,十六进制上面已经验证过了:

 【c】

#include <stdio.h>

void main(void)

{

    int x;

    scanf("%o", &x ); //按8进制输入

    printf("hex:%#X, dec:%d, oct:%#o\n", x,x,x ); //按16进制 10进制 8进制进行数据输出

}



scanf("%llX",&x)//按十六进制输入
printf("%llX,x)  // 按十六进制输出

// 对于十进制就不多介绍了

 附上实现代码:

//  八进制
#include<stdio.h>
int main()
{
    long long a,b;
	while(scanf("%o%o",&a,&b))
	{
		printf("%o\n",a+b);
	  }  
	return 0;
}

7 7
16
7 16
25
7 14
23

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章