两道面试题——进制各位数之和
2017-07-29 20:40
357 查看
1.1介绍
之前做了几道面试题,其中有两道类似的,都是求某进制各位数之和,因此写了一个递归函数,觉得比较好用特地再次记录一下。1.2第一题
1,题目描述2,解析
(1)下面的Data函数的参数为(10进制数num,要求转换的进制n,sum的初始值num%n),返回值为num转换成n进制后的各位数之和sum,如5转换成2进制为101,返回各位数之和为sum=1+0+1=2;5转换成3进制12,各位数之和为sum=1+2=3.
原理比较简单,十进制如何进位的,其他进制就是如何进位的,某一位大于进制数就递归该函数,小于就返回值。
(2)源码:
#include<iostream> using namespace std; //该函数比较重要 int Data(int num,int n,int sum) { int count; count=num/n; if(count<n){ sum+=count; return sum; } else{ return sum+Data(count,n,count%n); } } int main () { int i,j,k;//循环用 int mt,nt,m,n,r;//约分用 int arry;//十进制数 int vlaue;//最终和 cin>>arry; vlaue=0; for(j=2;j<=arry-1;j++){ vlaue+=Data(arry,j,arry%j); } //约分 m=vlaue; n=arry-2; r=n%m; while(r!=0) { n=m; m=r; r=n%m; } mt=vlaue/m,nt=arry-2/m; cout<<mt<<"/"<<nt; return 0; }
1.3第二题
1,题目描述2,解析
(1)如果上一题明白,这一题就无须解释了
(2)源码:
#include<iostream> using namespace std; int Data(int num,int n,int sum) { int count; count=num/n; if(count<n){ sum+=count; return sum; } else{ return sum+Data(count,n,count%n); } } int main(){ int n,vlaue=0,he1,he2; int i,j; cin>>n; for(i=1;i<=n;i++){ he1=Data(i,10,i%10); he2=Data(i,2,i%2); if(he1==he2){ vlaue++; } } cout<<vlaue; return 0; }
1.4总结
这段代码就直接拿来用来,比较简单。参数为(10进制数num,要求转换的进制n,sum的初始值num%n)。int Data(int num,int n,int sum) { int count; count=num/n; if(count<n){ sum+=count; return sum; } else{ return sum+Data(count,n,count%n); } }
相关文章推荐
- 各位周末玩了一天累了吧,我们一起来做两道面试题吧(据说淘宝的哟)!
- 各位周末玩了一天累了吧,我们一起来做两道面试题吧(据说淘宝的哟)!
- 各位周末玩了一天累了吧,我们一起来做两道面试题吧(据说淘宝的哟)!
- 两道c++面试题
- 两道C#面试题的思考,大家一起探讨
- 新的两道面试题(简单)
- 两道企业面试题(2)-生产者消费者问题
- 两道关于数据处理方面的面试题
- 下面哪个进制能表述 13*16=244是正确的?)[中国台湾某计算机硬件公司V2010年5月面试题]
- 一次阿里的面试题,不知道对不对,各位大神指导一下啊?
- 两道有趣的面试题
- 黑马程序员 分享两道面试题之二银行业务调度系统
- 各位周末结束后都累了吧,那我们一起来看看【寒冬】的面试题吧(据说阿里的哟)
- 各位周末结束后都累了吧,那我们一起来看看【寒冬】的面试题吧(据说阿里的哟)
- 关于六间房的两道PHP面试题
- 百度两道面试题
- 两道有意思的面试题
- [面试题]求反复各位数之和
- 关于运算符问题的两道面试题
- 尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题。现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示同一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示时为三位数1、7、3。按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11。