http://acm.hdu.edu.cn/showproblem.php?pid=4278
八进制转十进制:
View Code
1 #include <cstdio> 2 3 int st[10], top; 4 5 int deal(int a){ 6 int ret = 0; 7 8 top = 0; 9 while (a){ 10 st[top++] = a % 10; 11 a /= 10; 12 } 13 while (top--){ 14 if (st[top] > 8) st[top] -= 2; 15 else if (st[top] > 3) st[top]--; 16 ret = ret * 8 + st[top]; 17 } 18 19 return ret; 20 } 21 22 int main(){ 23 int n; 24 25 while (~scanf("%d", &n) && n){ 26 printf("%d: %d\n", n, deal(n)); 27 } 28 29 return 0; 30 }
http://acm.hdu.edu.cn/showproblem.php?pid=4279
规律题,正常情况下每逢偶数就加一,不过对于2和所有平方数,是否加一的情况相反:
View Code
1 #include <cstdio> 2 #include <cmath> 3 4 typedef __int64 ll; 5 6 ll deal(ll a){ 7 if (a < 6) return 0; 8 9 ll ret = (a >> 1) - 2; 10 ll r = (ll) sqrt((double)a); 11 12 if (r & 1) ret++; 13 14 return ret; 15 } 16 17 int main(){ 18 ll a, b; 19 int T; 20 21 scanf("%d", &T); 22 while (T-- && ~scanf("%I64d%I64d", &a, &b)){ 23 printf("%I64d\n", deal(b) - deal(a - 1)); 24 } 25 26 return 0; 27 }
——written by Lyon