http://codeforces.com/problemset/problem/136/B
题意 :就是说tor是一个三进制的运算,代表的是两个三进制数的运算,两个三进制数按位逐一相加后对三取余,没有进位,但是如果两个没有相同多的位数的话,短的那个0。而那个样例就是10进制的14和10进制的59进行tor运算,就相当于分别转化成三进制在进行tor运算,a tor b = c,给你a和c,让你求b 。
思路 : 其实也没什么好说的,题懂了,基本上思路也就出来了,我也就是把a c都转化成三进制的,然后用c的三进制减a 的三进制,最后再转化成10进制即可 。
#include<stdio.h> #include<string.h> #include<iostream> using namespace std ; int aa[110],bb[110],cc[110] ; int tran(int n ,int *s) { int i = 0 ; while(n) { s[i++] = n%3 ; n /= 3 ; } return i ; } int main() { int a,c ; memset(aa,0,sizeof(aa)) ; memset(bb,0,sizeof(bb)) ; memset(cc,0,sizeof(cc)) ; while(scanf("%d %d",&a,&c)!=EOF) { int lena = tran(a,aa) ; int lenc = tran(c,cc) ; int maxx = lena > lenc?lena:lenc ; for(int i = 0 ; i < maxx ; i++) { cc[i] = cc[i] >= aa[i]?cc[i]:cc[i]+3 ; bb[i] = cc[i]-aa[i] ; } int count = 1 ; int b = 0 ; for(int i = 0 ; i < maxx ; i++) { b += (count*bb[i]) ; count *= 3 ; } printf("%d\n",b) ; } return 0 ; }