题目大意:
我们要算the world of Witchcraft and Wizardry的加法运算。规则如下:从右往左,第i位的基数是第i个素数。比如,十进制2等于10,十进制 6等于100.
解题思路:
刚开始看到两个例子,还是比较懵逼的。后来从1到10分别写出来,才发现规律。根据题目的范围,我们用p数组记录素数。然后我们用va,vb栈来分别存储两个数,因为要先进后出。接下来我们按顺序处理就好。
代码如下:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<stack>
#include<cstdio>
using namespace std;
int main()
{
stack<int> va,vb;
int num;
char c;
int p[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47
,53,59,61,67,71,73,79,83,89,97};
while(scanf("%d",&num)!=EOF)
{
va.push(num);
c=getchar();
while(c==',')
{
scanf("%d",&num);
va.push(num);
c=getchar();
}
scanf("%d",&num);
vb.push(num);
c=getchar();
while(c==',')
{
scanf("%d",&num);
vb.push(num);
c=getchar();
}
int n=max(va.size(),vb.size());
stack<int> res;
int co=0;
int a,b;
for(int i=0;i<n;i++)
{
if(!va.empty())
{
a=va.top();
va.pop();
}
else
a=0;
if(!vb.empty())
{
b=vb.top();
vb.pop();
}
else
b=0;
int sum=a+b+co;
res.push(sum%p[i]);
co=sum/p[i];
}
for(int i=n;co!=0;i++)
{
res.push(co%p[i]);
co=co/p[i];
}
cout<<res.top();
res.pop();
while(!res.empty())
{
cout<<","<<res.top();
res.pop();
}
cout<<endl;
}
return 0;
}