您的位置:首页 > 编程语言 > C语言/C++

【京东】进制转换(C++机试2-1)

2016-09-05 22:34 260 查看

【京东】进制转换(C++机试2-1)

题目:



方法一:

直接计算:

#include<iostream>
using namespace std;

int numToBase(unsigned int num, unsigned int base)
{
int sum=0;
while(num)
{
sum+=num%base;
num/=base;
}
return sum;
}

int main()
{
unsigned int N,allSum=0;
cin>>N;
//边界处理
if(N==2) cout<<"2/1"<<endl;
else if(N<2) return 0;
else
{
for(int i=2; i<N; i++)
{
allSum+=numToBase(N,i);
}
cout<<allSum<<"/"<<N-2<<endl;
}
return 0;
}


说明:题目中要求基为2~A-1,但未说明输入为1或2时该如何处理。

方法二:

#include<iostream>
using namespace std;

void to_base_n(unsigned long, unsigned int, int *);

int main()
{
unsigned long number;

while( cin>>number)
{
if(number>2)
{
int all=0;
for(int i=2; i<number; i++)
{
int *sum=new int(0);
to_base_n(number, i, sum);
all+=*sum;
}
cout<<all<<"/"<<number-2<<endl;
}
else if(number==2)
cout<<2<<"/"<<1<<endl;
else
return 0;
}
return 0;
}

void to_base_n(unsigned long n, unsigned int base, int *sum)  //*recursive function
{
int i;
i = n % base;
*sum=*sum+i;
if(n >= base)
{
to_base_n(n/base, base, sum);
}
//cout<<i<<endl;
return ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  进制转换