数制转换(高精度数组除法的运用)

博客主要讲述高精度数组除法在C语言中的运用。因不能用整个数计算,需逆序运算。原本想用char数组,但因'\0'和'0'的区别易出错且会导致不必要计算,最终选择用int数组并随时更新长度。

还行

实际上就是对高精度数组除法的运用

因为不能整个数拿来计算,所以之前讲的顺序得出目标数字的方法用不了,只能逆序来算

第一次写高精度数组除法,感觉还行,本来想用char数组来计算,但是因为'\0'和'0'的区别必须分清(因为要用这个计算数字的长度),如果把所有计算得出的0记录成'\0'的话明显就会出错,而如果把所有计算得出的0都记成'0'就会导致大量不必要的计算

所以得分数组前端得到的0和中间得到的0,想想都麻烦,不如用int数组和一个数随时更新数组长度

代码如下:

#include<stdio.h>
#include<string.h>

int main(void)
{
    int n[321] = {0}, result[1101] = {0};
    int m = 0, len1 = 0;
    for(char c; (c = getchar()) != '\n'; len1++)
        n[m++] = c - '0';
    scanf("%d", &m);
    //将数翻转过来
    for(int i = 0, j = len1 - 1; i < j; i++, j--)
    {
        int tmp = n[i];
        n[i] = n[j];
        n[j] = tmp;
    }
    //开始转换
    int len2 = 0;
    while(len1)
    {
        int ext = 0;
        //除m并得到余数
        for(int i = len1 - 1; i >= 0; i--)
        {
            ext *= 10;
            ext += n[i];
            n[i] = ext / m;
            ext %= m;
        }
        //更新len1
        while(n[len1 - 1] == 0 && len1)  len1--;
        //得到result
        result[len2++] = ext;
    }
    //输出
    for(int i = len2 - 1; i >= 0; i--)
        printf("%d", result[i]);
    
    return 0;
}

一点废话:

现在调教了一下steam deck,使它可以让我写代码了(既可以玩游戏,又可以写代码啥的,简直就是perfect)

感觉好忙,下周一、二总共有三个期中考,周六要上两个习题课,周天还要去做学生会工作(本以为填两个时段是二选一,结果是两个时段都上,乐死了)

好在管理学的创业方案设计已经干完了(被带飞了,甚至拿了个第一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值