有道难题资格赛1

另类的异或 描述
对于普通的异或,其实是二进制的无进位的加法
这里我们定义一种另类的异或A op B, op是一个仅由^组成的字符串,如果op中包含n个^,那么A op B表示A和B之间进行n+1进制的无进位的加法。
下图展示了3 ^ 5 和 4 ^^ 5的计算过程
输入
第一行有一个正整数T, 表示下面共有T组测试数据。
接下来T行,每行有一组测试数据,是由空格隔开的三个部分组成:
A B C
A和C是两个十进制整数,B是一个字符串,由n个^组成
1 <= T <= 100, 0<=A,B<2^30, 1<=n<=1000
输出
每个测试数据输出一行,包含一个数字,即该数据的结果,用十进制表示。
样例输入
2
3 ^ 5
4 ^^ 5
样例输出
6
6
按照题意就可以写出代码:
#include"iostream"
#include"stdio.h"
#include "stack"
#include"math.h"
using namespace std;
int main()
{
 int a;
char *b = new char[100];
char *cbk=b;
int c;
int k=0;
cin>>a;
cin>>b;
while(*b=='^')
{
 ++k;b++;
}
cin>>c;
int k1=k+1;
k=0;
stack<int> st1;
stack<int> st2;
int a1=0;
while(a!=0)
{
 ++a1;
 st1.push(a%(k1));
 a=a/k1;
}
int mm=0;
int a2=0;
while(c!=0)
{
 ++a2;
 st2.push(c%(k1));
 c=c/k1;
}
if(a1>=a2)
{
 for(k=0;k<a1-a2;k++)
 st2.push(0);//这里是让两个栈中的元素个数是一样多的,这样才能进行十进制的转化
 mm=a1;//记录转换成某进制数的位数
}
if (a2>=a1)
{
 for(k=0;k<a2-a1;k++)
 st1.push(0);//这里是让两个栈中的元素个数是一样多的,这样才能进行十进制的转化
 mm=a2;
}
int sum=0;
while(!st2.empty()||!st2.empty())
{
 cout<<"st1: "<<st1.top()<<endl;
 cout<<"st2: "<<st2.top()<<endl;
 if((st1.top()+st2.top())>=(k1))
 {
  sum+=0;
 }
 
 else
 {
  sum+=(st1.top()+st2.top())*pow(k1,--mm);
    }
 st1.pop();
 st2.pop();
}
cout<<sum<<endl;
return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值