您的位置:首页 > 职场人生

两道面试题——进制各位数之和

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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐