【算法题5】求不同进制表示的位数之和的均值

尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题,现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示为三位数1、7、3,按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11,。 小B感兴趣的是,一个数A如果按2到A-1进制表达时,各个位数之和的均值是多少?她希望你能帮她解决这个问题? 所有的计算均基于十进制进行,结果也用十进制表示为不可约简的分数形式。

 1 #coding=utf-8
 2
 3 def gcd(x,y):
 4     if x>=y:
 5         ma=x
 6         mi=y
 7     else:
 8         ma=y
 9         mi=x
10
11     if ma%mi==0:
12         return mi
13     else:
14         return gcd(mi,ma%mi)
15
16 a=int(raw_input())
17 sum=0
18 for i in range(2,a):
19     m=a
20     while(m>0):
21         r=m%i
22         m=m/i
23         sum +=r
24
25 print str(sum/gcd(sum,a-2))+‘/‘+str((a-2)/gcd(sum,a-2))

18-23行代码解决了将数a表示成2进制到a-1进制的位数上的数值求和

因为题目要求将结果化简为分数,所以分子为sum,分母为a-2,需要求他们两个的最大公约数(辗转相除法实现,见3-14行),然后分子分母同时除以最大公约数即可,最后打印时用字符串连接的形式,‘/‘将化简后的分子和分母连接起来输出即可。

原文地址:https://www.cnblogs.com/yanmk/p/8780397.html

时间: 2024-11-22 22:43:34

【算法题5】求不同进制表示的位数之和的均值的相关文章

算法题:求数组中最小的k个数

说明:本文仅供学习交流,转载请标明出处,欢迎转载! 题目:输入n个整数,找出其中最小的k个数. <剑指offer>给出了两种实现算法: 算法1:采用Partition+递归法,该算法可以说是快速排序和二分查找的有机结合.算法的时间复杂度为O(n),缺点在于在修改Partition的过程中会修改原数组的值. 算法2:采用top-k算法.如果要找最小的K个数,我们才用一个含有K个值的大顶堆:如果要找最大的K个数,我们采用小顶堆.该算法的时间复杂度为O(nlogK),是一种比较好的算法,启发于堆排序

算法题:求链表倒数第K个结点

说明:本文仅供学习交流,转载请标明出处,欢迎转载!  题目:给出一个单链表,返回倒数第K个结点,最后一个结点为倒数第1个. <剑指offer>上面给的解法是设置两个指针,这里记为p1.p2,先让p2走(k-1)步,然后p1.p2同时走,当p2走到最后一个结点时,p1所指向的结点就是倒数第k个结点. 我觉得按照这样的逻辑写代码反而更容易出错,因为我们需要把我两件重要的问题:(1).p2先走(k-1)步:(2)循环结束的条件是p2到达最后一个结点,即p2->next==NULL.显然这样不太

light oj 1045 - Digits of Factorial(求阶乘在不同进制下的位数)

Factorial of an integer is defined by the following function f(0) = 1 f(n) = f(n - 1) * n, if(n > 0) So, factorial of 5 is 120. But in different bases, the factorial may be different. For example, factorial of 5 in base 8 is 170. In this problem, you

PAT 1015 Reversible Primes[求d进制下的逆][简单]

1015 Reversible Primes (20)(20 分)提问 A reversible prime in any number system is a prime whose "reverse" in that number system is also a prime. For example in the decimal system 73 is a reversible prime because its reverse 37 is also a prime. Now

UVA 10061 How many zero&#39;s and how many digits ? (m进制,阶乘位数,阶乘后缀0)

题意:给出两个数字a和b,求a的阶乘转换成b进制后,输出(1)后缀中有多少个连续的0? (2)有多少位? 思路:逐个问题解决. 设a!=k.  k暂时不用直接转成b进制. (1)阶乘后缀0问题.先看这个十进制后缀0的例子:http://www.cnblogs.com/xcw0754/p/4604473.html 解法差不多,稍变化. 首先将b分解成若干质数(比如8={2*2*2})保存在一个集合A中(注意自然数的质数分解是唯一的),只要有一个序列A就能构成一个0,因为满b就进位,b可以表示成10

求计算机进制一题

In which system(进制), expression 13*16 = 244 is true ? 析:思路是把运算中的每个数都转成10进制形式.设当前系统是X进制 13由X进制转成10进制为: 13 = 1 * X ^ 1 + 3 * X ^ 016由X进制转成10进制为:16 = 1 * X ^ 1 + 6 * X ^ 0244由X进制转成10进制为:244 = 2 * X ^ 2 + 4 * X ^ 1 + 4 * X ^ 0 这样方程联立,得出一个一元二次方程.(X + 3) *

算法题:求二进制位中0的个数

#include <iostream> using namespace std; //古有求二进制数中1的个数,今有求二进制中0的个数. int Grial(int x) { int count = 0; while (x + 1) { count++; x |= (x + 1); } return count; } int main() { cout << Grial(1) << endl; return 0; } //为了方便验证,我把求二进制数中1的个数也写下来.

【错题集】不同进制影响富文本的排版

今天发现导入的富文本颜色不同位置会发生偏移,经查证为标签颜色的进制不同. 对获取颜色文本的函数进行统一十六进制的修改: /** * 获取颜色的文本 */ public static getTextUseColor(text: string, color: number | string) { if (color as Number) //10进制转16进制 color = '0x' + parseInt(color + '').toString(16).toUpperCase(); return

进制,字节,字长,位数

字 word 字节 byte 位 bit 首先二进制,八进制,16进制是数学关系,而位数是计算机存储所用到的概念. 一个二进制数占一位,四个二进制数表达一个16进制数,所以一个16进制数占4位 8位为一个字节. 一个字=2个字节 字长是指字的长度 一个字的字长为16 一个字节的字长是8