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

hdoj 2031题代码及详解

2016-04-25 22:22 190 查看

#include<iostream>

using namespace std;

void fun(int n,int m)

{

if(n<m)

{

if(n==10)

printf("A");//如果n<m那n化成m进制的不就是n吗

if(n==11)

printf("B");

if(n==12)

printf("C");

if(n==13)

printf("D");

if(n==14)

printf("E");

if(n==15)

printf("F");

else

printf("%d",n);

}

else

{

fun(n/m,m);//此处极为重要,即递归部份极难理解

fun(n%m,m);

}

}

/*

下面开始详细讲解:

举个例子,例如n=82,m=4;

即为fun(20,4)->fun(5,4)->fun(1,4)

fun(2,4)->fun(0,4)->fun(1,4)

根据程序执行顺序先是fun(n/m,m),后是fun(n%m,m),当执行fun(n/m,m)时,会回到最开始,

仔细琢磨琢磨,对代码水平非常有好处,为什么,个人观点是每次的fun(n%m,m)产生的数据

都存在缓存区,而缓存区和栈类似,为先进后出,哈哈哈,希望对大家有帮助

*/

int main(void)

{

int n,m;

while(cin>>n>>m)

{

if(n<0)//此处为n<0情况;

{

n*=-1;

cout<<"-";

}

fun(n,m);

cout<<endl;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: