目录
1.基础知识点
//x为p进制数,转换成十进制数y
int y=0,product=1;
while(x!=0){
y = y + (x%10)*product;
x/=10;
product*=p;
}
//十进制数y转换为Q进制,逆序存于数组z
int z[40],num=0;
do{
z[num++] = y%Q;
y=y/Q;
}while(y!=0);
2.D进制的A+B
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int x,y,q;
scanf("%d %d %d",&x,&y,&q);
x+=y;
int ans[200],num=0;
do{
ans[num++] = x%q;
x/=q;
}while(x!=0);
for(int i=num-1;i>=0;i--){
printf("%d",ans[i]);
}
return 0;
}
3.在霍格沃茨找零钱
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int x1,x2,x3,y1,y2,y3;
int i1=17*29,i2=29;
scanf("%d.%d.%d %d.%d.%d",&x1,&x2,&x3,&y1,&y2,&y3);
int w1=x1*i1+x2*i2+x3,w2=y1*i1+y2*i2+y3;
int gap=w2-w1;
if(gap<0){
printf("-");
gap-=2*gap;
}
x1=gap/i1;
x2=gap%i1/i2;
x3=gap%i1%i2;
printf("%d.%d.%d",x1,x2,x3);
return 0;
}
4.General Palindromic Number
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int ans[2000],num=0;
int x,y;
scanf("%d %d",&x,&y);
do{
ans[num++]=x%y;
x/=y;
}while(x!=0);
bool flag=true;
for(int i=0;i<num;i++){
if(ans[i] != ans[num-1-i]){
flag=false;
}
}
if(flag){
printf("Yes\n");
}else{
printf("No\n");
}
for(int i=num-1;i>=0;i--){
printf("%d",ans[i]);
if(i!=0){
printf(" ");
}
}
return 0;
}
5.Colors in Mars
这一题比较简单,不用循环
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
char radix[15]={'0','1','2','3','4','5','6','7','8','9','A','B','C'};
int r,g,b;
scanf("%d%d%d",&r,&g,&b);
printf("#");
printf("%c%c",radix[r/13],radix[r%13]);
printf("%c%c",radix[g/13],radix[g%13]);
printf("%c%c",radix[b/13],radix[b%13]);
return 0;
}
6.A+B in Hogwarts
这种写法有一个2分的测试点无法通过
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int x1,x2,x3,y1,y2,y3;
int i1=17*29,i2=29;
scanf("%d.%d.%d %d.%d.%d",&x1,&x2,&x3,&y1,&y2,&y3);
int w1=x1*i1+x2*i2+x3,w2=y1*i1+y2*i2+y3;
long long gap=w2+w1;
if(gap<0) gap-=2*gap;
x1=gap/i1;
x2=gap%i1/i2;
x3=gap%i1%i2;
printf("%d.%d.%d",x1,x2,x3);
return 0;
}
可以按部就班地一步步计算结果和进位
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<set>
#include<queue>
#include<algorithm>
using namespace std;
int main(){
int x1,x2,x3,y1,y2,y3;
scanf("%d.%d.%d %d.%d.%d",&x1,&x2,&x3,&y1,&y2,&y3);
int r1,r2,r3;
int carry;
r3=(x3+y3)%29;
carry=(x3+y3)/29;
r2=(x2+y2+carry)%17;
carry=(x2+y2+carry)/17;
r1=x1+y1+carry;
printf("%d.%d.%d",r1,r2,r3);
return 0;
}