百炼OJ 2972 2973

简介: 一、2972相邻数字的基数等比:确定进制      所谓基数等比就是后一个数与前一个数有倍数的关系。如 111 = 1 + 1 * 2(1 + 2 * 1);      给定 如 11 11 121 确定进制是3 和 10 ,只输出最小的进制,即3;    1 /* ...

一、2972相邻数字的基数等比:确定进制

     所谓基数等比就是后一个数与前一个数有倍数的关系。如 111 = 1 + 1 * 2(1 + 2 * 1);

     给定 如 11 11 121 确定进制是3 和 10 ,只输出最小的进制,即3;

  

 1 /*            author :bakari
 2  *            2-16进制的计算
 3  *            特点:相邻数字的基数等比
 4  *            规律:x1x2x3(任意进制) ---> d1d2d3(十进制)(进制为p)
 5  *            x1*p(k-1) + x2*p(k-2) + x3*p(k-3) = p(k-3)(x3p + x1*p(2)) = p(k-3)(p(x3 + x1*p));
 6  */
 7 #include <iostream>
 8 #include <cstring>
 9 using namespace std;
10 
11 int const Max = 8;
12 
13 long RanToTen(const char *x ,const int& b)   //p代表进制
14 {
15     int nLen = strlen(x);
16     long ret = 0;
17     for (int i = 0; i != nLen; ++i){
18         if ((x[i] - '0') >= b) return -1;
19         ret *= b;
20         ret += x[i] - '0';
21 
22     }
23     return ret;
24 }
25 
26 int main()
27 {
28     char p[Max],q[Max],r[Max];
29     long pa , qa , ra;
30     int n ;
31     cin >> n;
32     while(n--){
33         int i;
34         cin >> p >> q >> r;
35         for (i = 2; i <= 16; ++i){
36             pa = RanToTen(p,i);
37             qa = RanToTen(q,i);
38             ra = RanToTen(r,i);
39             if (-1 == pa || -1 == qa || -1 == ra) continue;
40             if (pa * qa == ra){
41                 cout << i <<endl;
42                 break;
43             }
44         }
45         if (17 == i) cout<<"0"<<endl;
46     }
47     return 0;
48 }

二、2973相邻数字的基数不等比 :俗称skew数

      给定如 10120 转换后为 1 * (2^5 - 1)+ 0 * (2^4 - 1)+ 1 * (2^3 - 1)+ 2 * (2^2 - 1)+0 * (2^1 - 1)

      

 1 /*                author:bakari
 2  *                和一般进制转换不同,此进制基数不等比
 3  *                第k位的值Xk = Xk * (2^(k+1) - 1)
 4  *                令base[0] = 1;则:base[k] = 2^(k+1) - 1 = 2 * (2^k - 1) + 1 = 2 * base[k-1]+1;
 5  */
 6 
 7 #include <iostream>
 8 #include <cstring>
 9 using namespace std;
10 
11 const int MaxBit = 31;
12 int base[MaxBit];
13 
14 long int Transe(const char *x);
15 
16 int main()
17 {
18     char str[MaxBit];
19     base[0] = 1;
20     for (int i = 1; i != MaxBit; ++i)
21         base[i] = 2 * base[i-1] + 1;
22     while (1){
23         cin >> str;
24         if (Transe(str) == 0)
25             break;
26         else cout << Transe(str) <<endl;
27     }
28     return 0;
29 }
30 
31 long int Transe(const char *x)
32 {
33     int nLen = strlen(x);
34     long ret = 0;
35     if (strcmp(x,"0") == 0) return 0;
36     for (int i = 0,k = nLen - 1; i != nLen; ++i,--k){
37         ret += (x[i] -'0') * base[k];
38     }
39     return ret;    
40 }

个人总结:多角度思考问题

目录
相关文章
|
6月前
|
算法
【算法训练营】二叉树专题(二)
【算法训练营】二叉树专题(二)
63 0
|
6月前
|
存储 算法
【算法训练营】二叉树专题(一)
【算法训练营】二叉树专题(一)
61 0
|
3月前
|
存储 算法 API
P4779 【模板】单源最短路径(标准版) 题解
本文提供了使用链式前向星存储结构和堆优化的Dijkstra算法模板,用以解决单源最短路径问题,并包含了完整的题解和代码示例。
P4779 【模板】单源最短路径(标准版) 题解
|
4月前
|
人工智能 数据管理 API
精铸智刃·“百炼”成钢——深度探索阿里云百炼大模型开发平台
阿里云百炼平台是一个一站式的大型语言模型开发和应用平台,旨在帮助企业与开发者高效构建和部署定制化的大模型。平台集成了通义大模型、行业模型和第三方模型,提供模型微调、模型调优、模型部署、模型评测等工具链。用户可以轻松创建和管理模型,通过模型广场选择合适的模型,进行模型体验和调优,然后部署模型以供应用调用。
70346 11
精铸智刃·“百炼”成钢——深度探索阿里云百炼大模型开发平台
|
6月前
二叉树在线OJ
二叉树在线OJ
45 1
|
6月前
|
存储
单链表在线OJ题(详解+图解)
单链表在线OJ题(详解+图解)
49 3
|
6月前
|
存储
单链表在线OJ题二(详解+图解)
单链表在线OJ题二(详解+图解)
31 1
|
6月前
顺序表在线OJ题(详解+图解)
顺序表在线OJ题(详解+图解)
46 1
|
6月前
|
算法
[算法训练营] 二叉树专题(三)
[算法训练营] 二叉树专题(三)
63 0
|
算法 安全 Java
从0到1搞定在线OJ
从0到1搞定在线OJ