
还行
实际上就是对高精度数组除法的运用
因为不能整个数拿来计算,所以之前讲的顺序得出目标数字的方法用不了,只能逆序来算
第一次写高精度数组除法,感觉还行,本来想用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)
感觉好忙,下周一、二总共有三个期中考,周六要上两个习题课,周天还要去做学生会工作(本以为填两个时段是二选一,结果是两个时段都上,乐死了)
好在管理学的创业方案设计已经干完了(被带飞了,甚至拿了个第一)
博客主要讲述高精度数组除法在C语言中的运用。因不能用整个数计算,需逆序运算。原本想用char数组,但因'\0'和'0'的区别易出错且会导致不必要计算,最终选择用int数组并随时更新长度。
4019

被折叠的 条评论
为什么被折叠?



