精华内容
下载资源
问答
  • C语言高精度乘法的实现方法
    2021-05-19 17:52:28

    对于要求很搞的C语言高精度乘法,相信很多人还没有用到过,应为在常规的应用中一般精度的乘法就可以满足我们的计算要求,今天一起来看看高精度乘法的实现方法吧。

    /*

    高精度乘法

    输入:两行,每行表示一个非负整数(不超过10000位)

    输出:两数的乘积。

    */

    #include

    #include

    #include

    #include

    #define MAX 10001

    int bigchenfa(int *sum,int *a,int *b,int lsum,int la,int lb)

    {

    int i,j,k ;

    memset(sum,0,sizeof(sum));

    lsum = 0 ;

    for(i=1 ; i<= la ; i ) /*用数组模拟运算*/

    for(j=1,lsum=i-1; j<= lb ; j )

    sum[ lsum] = b[j] * a[i] ;

    for(i=1 ; i<= lsum ; i )/*进位处理*/

    if (sum[i] >= 10)

    {

    if ( sum[lsum] >= 10)

    lsum ;

    sum[i 1] = sum[i] / 10 ;

    sum[i] %= 10 ;

    }

    return lsum ;

    }

    int main(void)

    {

    int a[MAX]={0},b[MAX]={0},sum[MAX*2]={0} ;

    int la=0,lb=0,lsum=0;

    int i,j ;

    char sa[MAX],sb[MAX] ;

    scanf(\"%s %s\",sa,sb);

    la = strlen(sa);

    lb = strlen(sb);

    for(i=1,j=la-1; i<= la ; i ,j--)

    a[i] = sa[j] - ’0’ ;

    for(i=1,j=lb-1; i<= lb ; i ,j--)

    b[i] = sb[j] - ’0’ ;

    lsum = bigchenfa(sum,a,b,lsum,la,lb) ;

    for(i=lsum ; i>= 1 ; i--) [Page]

    printf(\"%d\",sum[i]);

    printf(\" \");

    system(\"pause\");

    return 0 ;

    }

    本文来源:搜集于网络

    更多相关内容
  • 高精度乘法 C语言

    2021-01-04 16:05:28
    高精度乘法 为什么需要高精度乘法 原因: 首先我们看一看C语言用到的表示整数的数据类型 1.int 2.long int 3.long long int 即使是最大的long long int 类型能表达的位数依然有限 所以需要该表处理更大数据的策略 ...

    高精度乘法

    为什么需要高精度乘法

    原因:
    首先我们看一看C语言用到的表示整数的数据类型
    1.int
    2.long int
    3.long long int
    即使是最大的long long int 类型能表达的位数依然有限(可以去百度具体就不写了)
    所以需要一个处理更大数据的策略

    如何改进处理大数据的乘法

    既然我们的计算机无法处理这么大的数字,那么我们可以试着转换一下思想,做一个模拟乘法,他不一定是计算机在完成乘法而是给出一个算法,计算机程序执行完以后结果就是乘法得出的结果。而同时计算机不用处理这么大的数据。最容易想到的是把数字当作字符处理。下main给出了两种方法

    两种思路

    a.

    示意图:在这里插入图片描述
    代码:

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int a[1000],b[1000],c[1000];//准备好三个数组
        int lena,lenb,lenc,i,j;
        char s1[]="986";
        char s2[]="123";
        lena=strlen(s1);
        lenb=strlen(s2);
        for(i=0;i<1000;i++)//将c数组赋予初值,后面会用上
            c[i]=0;
        for(i=1;i<=lena;i++)//986存入a[]
            a[i]=s1[lena-i]-'0';
        for(i=1;i<=lenb;i++)//123存入b[]
            b[i]=s2[lenb-i]-'0';
        for(i=1;i<=lenb;i++)//遍历被乘数123
            for(j=1;j<=lena;j++)//遍历乘数986
                c[i+j-1]+=a[j]*b[i];//c数组的
        lenc=lena+lenb-1;
        for(i=1;i<=lenc;i++)
        {
            c[i+1]+=c[i]/10;//求进位并把进位加入高位
            c[i]%=10;//保存余数
    
        }
        lenc++;//将数组长度加1用来保留前面产生的进位
        while(c[lenc]==0&&lenc>1)
            lenc--;//删去前面多余的0
        for(i=lenc;i>=1;i--)//遍历输出
            printf("%d",c[i]);
        printf("\n");
        return 0;
    }
    
    

    流程:
    在这里插入图片描述

    b.

    示意图;
    在这里插入图片描述
    代码:
    (与上一个代码基本一样除了标注部分)

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int a[1000],b[1000],c[1000];
    
        int lena,lenb,lenc,i,j;
        char s1[]="986";
        char s2[]="123";
        lena=strlen(s1);
        lenb=strlen(s2);
        for(i=0;i<1000;i++)
            c[i]=0;
        for(i=1;i<=lena;i++)
            a[i]=s1[lena-i]-'0';
        for(i=1;i<=lenb;i++)
            b[i]=s2[lenb-i]-'0';
      
    //************************************************
    (和上一个代码不一样部分)
      for(i=1;i<=lenb;i++)
            for(j=1;j<=lena;j++)
            {
                c[i+j-1]+=a[j]*b[i];
                c[i+j]+=c[i+j-1]/10;
                c[i+j-1]%=10;
    
            }
        lenc=lena+lenb;
    //************************************************
        for(i=1;i<=lenc;i++)
        {
            c[i+1]+=c[i]/10;
            c[i]%=10;
    
        }
        lenc++;
        while(c[lenc]==0&&lenc>1)
            lenc--;
        for(i=lenc;i>=1;i--)
            printf("%d",c[i]);
        printf("\n");
        return 0;
    }
    
    

    流程图:
    在这里插入图片描述

    展开全文
  • C语言高精度乘法

    2013-07-21 20:02:46
    如何用C语言高精度乘法高精度乘法需要用到函数调用,指针等知识
  • c语言高精度乘法

    千次阅读 2020-12-03 21:18:36
    高精度乘法 众所周知,由于整型数不能满足过大数的运算,所以,在进行过大数的乘法运算时需要运用一种新的方法------高精度乘法。 下面我将介绍大数相乘的几个步骤。 1.输入两个乘数,并定义后面需要到的变量 #...

    高精度乘法

    众所周知,由于整型数不能满足过大数的运算,所以,在进行过大数的乘法运算时需要运用一种新的方法------高精度乘法。
    下面我将介绍大数相乘的几个步骤。

    1.输入两个乘数,并定义后面需要到的变量

    
    #include <stdio.h>
    #include <string.h>
    int main(void)
    {
        char a[100],b[100];
        scanf("%s %s",&a,&b);
        int af[100],bf[100];
    	int x=strlen(a);
    	int y=strlen(b)
    

    2.将字符数组中的数转移到整型数组中

    	for(int i=0;i<x;i++)
    	{
    		af[i]=a[x-i-1]-'0';
    		bf[i]=b[x-i-1]-'0';
    	 }
    

    3.我们再声明一个数组c来储存答案。大家通过一个简单的乘法运算进行模拟就可以看出,以同样的储存规则,a[0] * b[0] = c[0]; a[0] * b[1] + a[1] * b[0] = c[1];逐渐我们可以发现规律: "c[i + j] += a[i] * b[j]"同过一个循环去实现,就可以把c[i + j]计算出来。

     for(int i=0;i<x;i++)
    	 {
    	 	for(int j=0;j<y;j++)
    	 	{
    	 		c[i+j]=c[i+j]+af[i]*bf[j];
    		 }
    	 }
    

    4.把c中的每一个都进位,最后输出。

    	 int num=0;
    	 int t;
    	 while(c[t]!=0)
    	 {
    	 	t++;
    	 }
    	 for(int i=0;i<t;i++)
    	 {
    	 	num=c[i]+num;
    	 	if(num>=10)
    	 	{
    	 		c[i]=num%10;
    	 		num=num/10;
    		 }
    		 else
    		 {
    		 	c[i]=num;
    		 	num=0;
    		 }
    		 
    	 }
    	 if(num!=0)
    	 {
    	 	c[t]=num;
    	 		for(int i=t;i>=0;i--)
    	 	{
    	 		printf("%d",c[i]);
    		 }
    	 }
    	 else
    	 {
    	 	for(int i=t-1;i>=0;i--)
    	 	{
    	 		printf("%d",c[i]);
    		 }
    	 }
    	 
    	 return 0;
    }
    
    展开全文
  • 高精度乘法(高精乘高精)(C语言实现)

    千次阅读 多人点赞 2018-10-13 09:28:25
    高精度,是学C语言漫长的路上必须要学的一类程序 &amp;gt;&amp;gt;&amp;gt;高精度加法(C语言实现)&amp;lt;&...高精度减法(C语言实现)&...高精度乘法(高精乘低精)(C

    高精度,是学C语言漫长的路上必须要学的一类程序
    >>>高精度加法(C语言实现)<<<
    >>>高精度减法(C语言实现)<<<
    >>>高精度乘法(高精乘低精)(C语言实现)<<<
    >>>高精度乘法(高精乘高精)(C语言实现)<<<
    >>>高精度除法(高精除低精)(C语言实现)<<<


    源代码&注释

    #include <stdio.h>
    #include <string.h>
    char s[10000],ss[10000];
    int a[10000],b[10000],c[10000];
    int len,lenn;
    
    /*-------------高精度乘法(高)--------------*/	
    void cheng_gao()     //高是指高精度乘高精度 
    {
    	len = strlen(s);
    	lenn = strlen(ss);
    	memset(a,0,sizeof(a));   //清零数组
    	memset(b,0,sizeof(b));
    	memset(c,0,sizeof(c));	
    	for (int i = 0 ; i < len ; i++)
    		a[len - i - 1] = s[i] - '0';    //将字符串转化为数组 
    	for (int i = 0 ; i < lenn ; i++)
    		b[lenn - i - 1] = ss[i] - '0';
    		
    	memset(c,0,sizeof(c));   //清零 
    	for (int i = 0 ; i < len ; i++)
    		for (int j = 0 ; j < lenn ; j++)
    			c[i + j] += a[i] * b[j];       //运算(这个就有一点复杂了) 
    		
    	int l = len + lenn - 1;    //l是结果的最高位数 
    	for (int i = 0 ; i < l ;i++)
    	{
    		c[i + 1] += c[i] / 10;    //保证每一位的数都只有一位,并进位 
    		c[i] %= 10;
    	}
    	if (c[l] > 0) l++;     //保证最高位数是对的 
    	while (c[l - 1] >= 10)
    	{
    		c[l] = c[l - 1] / 10;
    		c[l - 1] %= 10;
    		l++;
    	}
    	while (c[l - 1] == 0 && l > 1) 
    		l--;    //while去零法 
    	printf("结果:\n");
    	printf("%s × %s = ",s,ss);
    	for (int i = l - 1; i >= 0 ; i--)    //输出结果 
    		printf("%d",c[i]);
    	printf("\n");     //换行 
    }                               //高精度乘法(高)你懂了吗
    
    void print()  //输出函数 
    {
    	printf("高精度乘法(高)(By STY)\n\n");
        printf("退出请按“Ctrl+Z”(在键盘上),并按回车,谢谢使用!\n"); 
        printf("请输入两个数字:\n");
        printf("数字:(用空格隔开)\n");
    } 
    
    int main()
    {
        print();
    	while (scanf("%s%s",s,ss) != EOF)
    	{
    		printf("\n结果:\n"); 
            cheng_gao();    //引用高精度乘法函数
            printf("\n\n");
            print();
    	}
    	return 0;
    }
    
    

    这就是高精度乘法(高精乘高精)的整段代码,
    希望大家在看了这篇文章后理解和会使用高精度乘法(高精乘高精)的运算了


    希望大家喜欢这篇文章!!!
    如有问题请留言,谢谢!!!

    >>>我的博客<<<

    展开全文
  • C语言中的高精度乘法

    万次阅读 多人点赞 2015-11-06 00:22:50
    大一新生初谈C语言中的高精度乘法 1为什么需要高精度乘法及其实质 2高精度乘法原理 3高精度乘法的实现 a 运算前的准备 b一位位地运算 c处理进位 d输出结果 4整体的代码 5结语 大一新生对高精度乘法的一种通俗理解。...
  • 试题 算法提高 高精度乘法                              &...
  • 高精度乘法

    2011-10-23 16:38:02
    此程序是一个计算高精度的c++程序,使用字符方法,利用数组存储。
  • C语言实现高精度乘法

    2021-08-13 14:08:19
    大一小白尝试C语言高精度乘法 一、高精度乘法是什么 高精度乘法就是对于普通数据类型无法表示的大整数进行乘法运算。 二、为什么需要高精度乘法C语言中,常用的数据类型有int, long long, double等,但是这些数据...
  • 高精度乘法(高精乘低精)(C语言实现)

    千次阅读 多人点赞 2018-09-09 15:43:32
    >>>高精度乘法(高精乘低精)(C语言实现) >>>高精度乘法(高精乘高精)(C语言实现) >>>高精度除法(高精除低精)(C语言实现) #源代码&注释 #include #include using namespace std; char s[10000...
  • 说实话我刚开始学高精度的时候觉得挺难的 ,写了代码之后才感觉其实高精度乘法还是比较简单的,就是代码量稍稍有点大。 接下来进入正题 先上张图 没错应该看的出来,高精度乘法其实就是一位一位去乘,然后按位...
  • C语言高精度乘法运算

    2021-05-16 14:55:27
    int c[3000]; //两个数相乘,结果保存在数组c中 void chengfa(char numberN[150000],char numberM[150000]){ int n = strlen(numberN), m = strlen(numberM); int a[n], b[m]; int i, j; for (i = 0, j = n - 1;...
  • C++ 的高精度乘法

    千次阅读 多人点赞 2020-02-21 15:52:31
    为什么需要高精度计算 对于 C++ 而言,最大的数据为 long long(64b,8位),对于超过 8B 的数据,C++ 没有对应的数据类型进行表示。...高精度乘法计算原理 在读小学时,我们做乘法都采用竖式方法,如图 1 ...
  • 满意答案小早川秋秋秋2013.07.22采纳率:57%等级:7已帮助:610人帮你修改了一下。#include#include#include...int a[30]={0},b[30]={0},c[30]={0},g=0,d=0,e=0,f=0,k=0,i,j;//dgets(a1);d=strlen(a1);gets(b1);e=s...
  • P1919 FFT加速高精度乘法题意:给出两个n位10进制整数x和y,你需要计算x*y。题解:对于十进制数我们可以将其转换成\(a0*10^0+a1*10^1+a2*10^2...an*10^n\)那么对于两个数,我们就可以求出两个的系数表示后得到a的...
  • 1136高精度乘法.cpp

    2019-09-29 21:05:36
    高精度,是学C语言漫长的路上必须要学的一类程序,菜鸡博主大一刷OJ时候的存货
  • 高精度高精度乘法(C++)

    千次阅读 多人点赞 2021-08-04 22:29:31
    今天咱们的主角是高精度高精度乘法 咱们先回顾一下竖式乘法 我们先不急着进位,先来看看,对应位置上的数字都是这么来的。 对于不足位我们补充零后,不难发现,对应位置的最后答案,是由该位置起以后的全部...
  • 对于python语言来说其实可以不用高精度乘法,直接使用两个数字相乘也不会溢出,而且直接计算的速度更快,而对于其他语言来说则需要使用高精度乘法才不会出现溢出的情况。 3. 代码如下: c++代码(c++与python的运行...
  • 这里的高精度乘法主要指按位模拟运算,实际上就是模拟乘法的过程,也就是笔算的过程。(你拿张纸就可以轻易的模拟出来,但是你原来可能没发现过其中的规律)。2,原理既然是一个很大的数,我们便不能够在用简单的数据...
  • C语言高精度乘法

    千次阅读 2017-04-22 21:22:43
    首先应判断两个数有没有为零,然后判断两个数之前有没有负号,如果有负号,则不考虑负号将字符串倒置转换成数字类型放入一个数组中,然后将两个数组的每一位对应相乘,进位与之前的高精度加法一样,最后输出的时候的...
  • 高精度乘法 题意 给定两个正整数,计算它们的积。正整数长度的范围是1到100000。 分析 1.高精度乘法分为高精度乘以低精度和高精度乘以高精度。 算法1:高精度乘以低精度 1.从高精度数的低位开始,每一个数位上的数...
  • c++高精度乘法代码

    2022-04-22 22:32:49
    本文提供高精度乘法代码 可能不太完美,也可能不是最优解 代码手打 高精度乘法 #include<bits/stdc++.h> using namespace std; string s1,s2; int a[100005],b[10005],c[200005]; int lena,lenb,lenc; ...
  • 高精度乘法(C++实现)

    千次阅读 2020-10-22 12:42:44
    2.高精度乘法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。(注意:字符串中0下标从左开始,竖式运算中0下标从右开始,故代码中需要有一个逆序操作。如a[i]=s1[s1....
  • C++高精度乘法模板

    千次阅读 2018-07-09 11:15:08
    方法还是与高精度加法的方法差不多,列一个竖式,就可以发现其中的规律了。 #include &amp;amp;lt;iostream&amp;amp;gt; #include &amp;amp;lt;cstdio&amp;amp;gt; #include &amp;amp;lt;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,128
精华内容 11,651
关键字:

高精度乘法c