C语言中两个整型数据的高精度除法

本文深入探讨了高精度除法算法的实现细节,通过实例展示了如何利用循环和试商法进行精确到小数点后的高精度计算。重点介绍了算法的具体步骤、关键变量的作用以及输入输出的交互方式。

算法:

首先输出x/y的整数部分,对其余数u=x%y试商n次,以满足精度要求。

每次试商:x=u*10为被除数,y为除数,商x/y(整数)作为结果的一位打印输出,余数为u=x%y。若u不等于0,继续试商,直到u=0或是达到试商的n位为止。

算法来自:杨克昌编著《计算机程序设计典型例题精解》之高精度窗,国防科技大学出版社出版。

/*两个整数数据的高精度除法*/
#include<stdio.h>
int main()
{
long int x,y,u,n;
printf("请输入两个整数:\n");
scanf("%d%d",&x,&y);
printf("您想输出小数点后几位?(如果可以整除,只需要输出小数点后一个0)\n");
scanf("%d",&n);
printf("结果:\n");
printf("%d/%d=\n%d.",x,y,x/y);
   while(n--)
   {
    u=x%y;
    x=u*10;
    printf("%d",x/y);
    if(u==0)
     break;
    if(n%10==0)
     printf("\n");
   }
   printf("\n");
   return 0;
}

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; } ``` 这段代码实现了高精度除法,通过将被除数和除数转换为整型数组,然后从高位到低位进行除法运算,最后将商转换为字符串输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值