学校OJ题——字符串(十六进制)

该博客讨论了如何解决一个关于十六进制数相加的问题,给出了一种利用字符串流简化代码的方法。文章提供了样例输入和输出,并指出原始实现的不足,鼓励进一步优化代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题 D: 十六进制加
时间限制: 1 Sec 内存限制: 128 MB
提交: 486 解决: 231
[提交][状态][讨论版]
题目描述
在十六进制表示中,ABCDEF用于表示十进制的10、11、12、13、14、15

现输入两个表示十六进制整数的字符串,请计算它们相加的结果,用十进制表示。

如果输入的字符串包含非十六进制的编码,无需计算,直接输出-1表示错误

十六进制转十进制举例,例如十六进制数23A4共有4位数,从右往左数,含义如下:

数字2在第4位,对应16的3次方

数字3在第3位,对应16的2次方

数字A表示十进制的10,它在第2位,对应16的1次方

数字4在第1位,对应16的0次方

因此23A4 = 216^3 +316^2 + 1016^1 + 416^0

    = 2*4096 + 3*256 + 10*16 + 4*1

    = 9124

所以十六进制的23A4转成十进制是9124

输入
第一行输入T表示有T个测试实例

第二行输入第一个十六进制整数的字符串(长度不超过5)

第二行输入第二个十六进制整数的字符串(长度不超过5)

依此类推输入下一个实例

输出
输出相加的结果,用十进制表示

样例输入
3
A8
9F
3322Q
44455
11111
22222
样例输出
327
-1
209715
提示
注意十六进制的每个位表示十六的不同次幂

之前第一次写写的很麻烦,就大概是先判断两个字符串是否满足合法的十六进制数然后再做加法
代码如下:

	#include <iostream>
	#include <cstdlib>
	#include <cstdio>
	#include <cstring>
	#include <algorithm>
	using namespace std;
	bool isok(string x) //判断是不是合法字符串
	{
   
	    int n=x.length();
	    for(int i=0;i<n;i++)
	        if( !((x[i]>='0' && x[i]<='9') || (x[i]>='A' && x[i]<='F')))
	            return false;
	    return true;
	}
	int main()
	{
   
	    string str1,str2;
	    char* str="0123456789ABCDEF";
	    int T;
	    cin>>T;
	    while(T--)
	    {
   
	        cin>>str1>>str2;
	        string result;</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值