c语言用辗转相除法将一个十进制整数转换成任意非十进制数(二、八、十六)

2024-11-20 04:27:32
推荐回答(1个)
回答1:

#include 
void main()
{
    /* b[16]为数组,n—十进制数,m—进制类型,r—余数,i—循环变量,k—下标 */
    int b[16],t,m,n,k,r,i;
    
    printf("请输入一个十进制整数: "); /* 输入提示 */
    scanf("%d",&n);
    
    printf("请输入一个要转换的进制类型(2,8,16): "); /* 输入提示 */
    scanf("%d",&m);
    
    t=n; /* 用t暂存n */
    k=-1; /* k为数组下标, 初值为-1 */
    
    /*在两条星线间填入代码, 用辗转相除法将十进制数转换为m进制数并存入数组b*/
    /**********************************************************************/
    if(m != 2 && m!= 8 && m!=16)
    {   
        printf("输入的进制数不是2,8,16其中之一,默认使用2!!!!!!!\n");
        m = 2;
    }   
    while(n) {
        r = n % m;
        n = n / m;
        b[++k] = r;
    }   
    
    /**********************************************************************/
    
    /*输出提示*/
    printf("十进制整数%d转换为%d进制数,结果=",t,m);
    
    /*在两条星线间填入代码, 从高位到低位输出数组b(使用switch多分支语句)*/
    /*********************************************************************/
    for(i = k;i >= 0;i--)
        printf("%d", b[i]);
    
    /*********************************************************************/
    
    printf("\n"); /* 换行 */
}