Problem Description
Many classmates said to me that A+B ismust needs.
If you can’t AC this problem, you would invite me for night meal.^_^
Input
Input may contain multiple test cases.Each case contains A and B in one line.
A, B are hexadecimal number.
Input terminates by EOF.
Output
Output A+B in decimal number in oneline.
Sample Input
1 9
A B
a b
Sample Output
10
21
21
Author
威士忌
Source
HZIEE 2007 Programming Contest
知识补充:
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
char a,b;
int c;
// scanf("%c %c",&a,&b);
// c=a-b;
// printf("%d %d\n",a,b);
// printf("%c",c);
cin>>a>>b;
c=a+b;
cout<<"第一个数="<<a<<"第二个数="<<b<<endl;
cout<<c<<endl;
return 0;
}
scanf是会识别空格、回车的,他会把空格、回车也当作%c输入的。
1)char类型存的是字符,也可以理解为字符的ascii码。两个字符做加减,即两个ascii码做加减,结果就是数。
你可以在scanf("%c %c",a,b),在两个%c之间加个空格,他就会允许你在输入的时候以空格区分,或者别的符号比如,/等。
gets函数可以一次接收 一行输入串,其中可以有空格,也就是说空格可以做为字符串的一部分输入.
scanf("%s%s",a,b)是不识别空格或者回车,输入空格、回车就是告诉电脑我要输入下一个字符串了
scanf("%x%x",a,b),跟%s一样
2)cin不会识别空格或者回车
注意这题输入的是字符串。。。。。。
解法一:
#include <cstdio>
#include<iostream>
using namespace std;
int translation(char a){//把单个的十六进制数转化为十进制
if(a>='0'&&a<='9'){
return a-'0';
}
if(a>='a'&&a<='f'){
return a-'a'+10;
}
if(a>='A'&&a<='F'){
return a-'A'+10;
}
}
int main()
{
charinshu1[1005],inshu2[1005];
int i,outshu1,outshu2;
while(scanf("%s%s",&inshu1,&inshu2)!=EOF){//对字符串中的字符进行操作,一般用scanf
outshu1=0;
outshu2=0;
for(i=0;inshu1[i]!='\0';i++){//把输入的16进制数转化为十进制
outshu1=outshu1*16+translation(inshu1[i]);
}
for(i=0;inshu2[i]!='\0';i++){//用字符数组盛放字符串,数组肯定很大,遍历数组直到字符串完毕
outshu2=outshu2*16+translation(inshu2[i]);
}
outshu1=outshu1+outshu2;
cout<<outshu1<<endl;
}
return 0;
}
解法2:
%c 读入一个字符 %d 读入十进制整数 %i 读入十进制,八进制,十六进制整数 %o 读入八进制整数 %x 读入十六进制整数 %X 同上 %c 读入一个字符 %s 读入一个字符串 %f 读入一个浮点数
#include<stdio.h> int main() { int i,j,sum; while(scanf("%x%x",&i,&j)!=EOF) { sum=i+j; printf("%d\n",sum); } return 0; }
转载请注明原文地址: https://ju.6miu.com/read-661274.html