高精度除法:高精度除以低精度

本编仅限于除数是低精度的情况!!!

基本思想
一位数一位数地与除数相除,余数乘10加入下一位上

举例说明
148除以6
首先用1除以6,得0,余1
再用(1x10+4)除x以6,得2,余2(1是上一位的余数,4是这一位上的数)
再用(2x10+8)除以6,得4,余4(2是上一位的余数,8是这一位的数)
所以结果为024,即24

see the code

#include <bits/stdc++.h>

using namespace std;

int main()
{
    char a[100];//被除数
    int b;//除数
    cin >> a;
    cin >> b;
    int cha[100];
    int l=strlen(a);
    for(int i=0;i<l;i++)//被除数的每一位数转换为int型
    {
        cha[l-i-1]=a[i]-48;
    }
    int ans[100];
    int x=0;
    int m=l-1;
    for(int i=l-1;i>=0;i--)//每一位计算
    {
        ans[i]=(cha[i]+x*10)/b;
        x=(cha[i]+x*10)%b;
    }
    while(!ans[m]&&m>=1)//确定结果的位数
        m--;
    for(int i=m;i>=0;i--)//输出结果
    {
        cout << ans[i];
    }
    cout << endl ;
    return 0;
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
C语言实现高精度除法高精度除以高精度)可以通过字符串和数组来实现。下面是一个示例代码: ```c #include <stdio.h> #include <string.h> #define MAX_LEN 1000 void divide(char dividend[], char divisor[], char quotient[]) { int len1 = strlen(dividend); int len2 = strlen(divisor); int i, j, k; // 将被除数和除数转换为整型数组 int num1[MAX_LEN], num2[MAX_LEN]; for (i = 0; i < len1; i++) { num1[i] = dividend[i] - '0'; } for (i = 0; i < len2; i++) { num2[i] = divisor[i] - '0'; } // 初始化商和余数 int result[MAX_LEN], remainder[MAX_LEN]; memset(result, 0, sizeof(result)); memset(remainder, 0, sizeof(remainder)); // 从高位到位进行除法运算 for (i = 0; i < len1; i++) { // 将余数左移一位,加上当前位的数字 for (j = len2 - 1; j >= 0; j--) { remainder[j + 1] = remainder[j]; } remainder[0] = num1[i]; // 计算当前位的商 for (j = 0; j < 10; j++) { if (compare(remainder, num2, len2) >= 0) { subtract(remainder, num2, len2); result[i]++; } else { break; } } } // 将商转换为字符串 int len = 0; for (i = 0; i < len1; i++) { if (result[i] != 0) { break; } } for (; i < len1; i++) { quotient[len++] = result[i] + '0'; } quotient[len] = '\0'; } int compare(int num1[], int num2[], int len) { for (int i = 0; i < len; i++) { if (num1[i] > num2[i]) { return 1; } else if (num1[i] < num2[i]) { return -1; } } return 0; } void subtract(int num1[], int num2[], int len) { for (int i = len - 1; i >= 0; i--) { if (num1[i] < num2[i]) { num1[i] += 10; num1[i - 1]--; } num1[i] -= num2[i]; } } int main() { char dividend[MAX_LEN], divisor[MAX_LEN], quotient[MAX_LEN]; printf("请输入被除数:"); scanf("%s", dividend); printf("请输入除数:"); scanf("%s", divisor); divide(dividend, divisor, quotient); printf("商为:%s\n", quotient); return 0; } ``` 这段代码实现了高精度除法,通过将被除数和除数转换为整型数组,然后从高位到位进行除法运算,最后将商转换为字符串输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值