题目地址:
第i位表示的实际大小是前i 个素数的乘积那么多,(第0位表示1) 进位规则是这一位减去p[i] (例如第0位减去p[0]==2) 高以为加1 ,由于更加难进位了,所以加法先相加,然后一次进位扫描就能保证每一位在范围内。
输入输出有点麻烦,是这个题的考点吧
代码:
#include#include #include #include #include using namespace std;int p[101];vector prime;int na[25];int nb[25];int ans[26];void pre(){ for(int i=2;i<=10;i++) if(p[i]==0) for(int j=i*i;j<=100;j+=i) p[j]=1; for(int i=2;i<=100;i++) if(p[i]==0) prime.push_back(i);}int max(int a,int b){ return a>b?a:b;}int main(){ pre(); string a,b; while(cin>>a>>b) { memset(na,0,sizeof(na)); memset(nb,0,sizeof(nb)); if(a=="0"&&b=="0") break; int aa=0,bb=0; int cnta=0; int cntb=0; for(int i=0;i =prime[i]) { ans[i]-=prime[i]; ans[i+1]+=1; } int start=0; for(int i=25;i>=0;i--) { if(ans[i]==0) continue; else { start=i; break; } } for(int i=start;i>0;i--) { cout< <<','; } cout< <