一、题目描述
循环输入。给定一个十进制数 d 和 一个进制X(2≤X≤16),输出它的十进制的表示。当没有任何输入时,程序结束。
方法:
(1)十进制转换其他进制,采取整除取余法
(2)定义一个数组,用于存放取余留下的数据,第一位用于计数
(3)倒序输出该数组即可,第一位用于计数的,作为倒序的开始
代码如下:
#include"stdio.h"
int Print(int v)
{
if(v>=10&&v<=16)
{
printf("%c",v-10+'A');
}
else
{
printf("%d",v);
}
}
int main()
{
int i;
int d,x;
int sta[100];
while(scanf("%d%d",&d,&x)!=EOF)
{
if(d==0)
{
printf("0");
}
else if(d<0)
{
d=-d;
printf("-");
}
sta[0]=0; //用第一个元素来计数
while(d)
{
sta[++sta[0]]=d%x;
d/=x;
}
for(i=sta[0];i>0;--i)
{
Print(sta[i]);
}
printf("\n");
}
}
二、课后习题
1.题目
方法:
(1)利用整除取余法,先将所有取余的数存进数组,
(2)然后将数组中除了第一位用来计数的其他数全部求和即可
(3)这个题的意思,就相等于是求该十进制数取余于该进制的所有值的求和
代码如下:
int sumBase(int n, int k){
int ah[100],i,ans=0;
if(n==0)
{
return 0;
}
ah[0]=0;
while(n)
{
ah[++ah[0]]=n%k;
n/=k;
}
for(i=ah[0];i>0;--i)
{
ans+=ah[i];
}
return ans;
}