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

来源:互联网 发布:苹果版解压缩软件 编辑:程序博客网 时间:2024/06/15 15:44

1.1介绍

之前做了几道面试题,其中有两道类似的,都是求某进制各位数之和,因此写了一个递归函数,觉得比较好用特地再次记录一下。

1.2第一题

  1,题目描述


  2,解析

(1)下面的Data函数的参数为(10进制数num,要求转换的进制nsum的初始值num%n),返回值为num转换成n进制后的各位数之和sum,如5转换成2进制为101,返回各位数之和为sum=1+0+1=25转换成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,要求转换的进制nsum的初始值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);    }}
原创粉丝点击