精华内容
下载资源
问答
  • 大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法c语言源文件大整数乘法...
  • 大整数乘法C语言版本

    2014-09-24 19:11:14
    分治思想大整数乘法 基于王晓东版 算法设计与分析
  • #include#includeusing namespace std;int num(int u) //计算乘数的位数{int i,num;i=1;num=u/10;while(num!=0){u=num;num=u/10;i=i+1;}//cout<return i;}void MUL(int u,int i,int &...x)//将乘数分治{w=u/(pow...

    #include

    #include

    using namespace std;

    int num(int u) //计算乘数的位数

    {

    int i,num;

    i=1;

    num=u/10;

    while(num!=0)

    {

    u=num;

    num=u/10;

    i=i+1;

    }

    // cout<

    return i;

    }

    void MUL(int u,int i,int &w,int &x)//将乘数分治

    {

    w=u/(pow(10,i/2));

    x=u-w*pow(10,i/2);

    // cout<

    }

    int main(int argc, char* argv[])

    {

    int multi,multi1;//定义两个乘数

    int number,number1,w,x,y,z,product,product1,product2,product3;

    cout<

    cin>>multi>>multi1;

    number=num(multi);//计算位数

    number1=num(multi1);

    MUL(multi,number,w,x);//将乘数分治

    MUL(multi1,number1,y,z);

    if(number%2!=0)//如果乘数位数是奇数

    {

    product=w*y*pow(10,number-1);

    product1=((w+x)*(y+z)-w*y-x*z)*pow(10,number/2);

    product2=x*z;

    product3=product+product1+product2;

    // cout<

    cout<

    }

    else//如果乘数位数是偶数

    {

    product=w*y*pow(10,number);

    product1=((w+x)*(y+z)-w*y-x*z)*pow(10,number/2);

    product2=x*z;

    product3=product+product1+product2;

    // cout<

    cout<

    }

    return 0;

    }

    展开全文
  • 分治法 - 大整数乘法 题目描述 求两个不超过200位的非负整数的积。 输入格式 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出格式 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是...

    分治法 - 大整数乘法

    题目描述

    求两个不超过200位的非负整数的积。

    输入格式

    有两行,每行是一个不超过200位的非负整数,没有多余的前导0。

    输出格式

    一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。

    解题思路

    用两个char型数组a[100],b[100]分别存放两个整数。arr1为大数a的数字型,arr2为大数b的数字型,即数组每一位存放大数的每一位,arr3存放乘积。

    当an…a2a1与bm…b1相乘时,单步执行结果为b1a1 b1a2 … 共有mn项。

    arr3[i+j]+=arr2[i]*arr1[j]

    当将mn个值放入arr3中时,再考虑进位。当某一项大于10时,就进位,接收进位的为第i+1项。

    考虑到结果为0的情况,设置一个Flag,从arr3的较大的下标位开始循环,遇到非0的数才打印,实现去除前导零的步骤。

    完整代码及测试结果

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    char str1[210], str2[210];
    int arr1[210], arr2[210], arr3[40010];
    int main()
    {
        gets(str1);
        gets(str2);
        int i , j;
        int len1 = strlen(str1);
        int len2 = strlen(str2);
       i = 0;
        for(j = len1 - 1; j >= 0; j--)
        {
        	//arr1存放大数a的数字型
            arr1[i] = str1[j] - '0';
            i++;
        }
        i = 0;
        for(j = len2 - 1;j >= 0; j--)
        {
        	//arr2存放大数b的数字型
            arr2[i] = str2[j] - '0';
            i++;
        }
        for(i=0;i<len2;i++)
        {
            for(j=0;j<len1;j++)
                arr3[i+j]+=arr2[i]*arr1[j];//相乘
        }
        for(i = 0;i < 400;i++)
        {
        	//处理相加大于10的情况
            if(arr3[i] >= 10)
            {
                arr3[i+1]+=arr3[i]/10;
                arr3[i]=arr3[i]%10;
            }
        }
        int flag = 0;
    	for( i = 400; i >= 0; i -- )
    		if(flag)
    			printf("%d", arr3[i]);
    		else if(arr3[i]) {
    			printf("%d", arr3[i]);
    			flag = 1;
    		}
    	if(!flag )
    		printf("0");//结果为0 
    	return 0;
       
    } 
    
    

    一组测试样例及结果
    在这里插入图片描述

    展开全文
  • 用字符数组接受大整数 然后根据两数相乘的基本法则进行运算 #include<stdio.h> #include<string.h> int c[200] = { 0 }; int len; void cheng(char a[], char b[]) { for(int i = strlen(a) - 1; i &...

     用字符数组接受大整数 然后根据两数相乘的基本法则进行运算

    #include<stdio.h>
    #include<string.h>
    int c[200] = { 0 };
    int len;
    void cheng(char a[], char b[]) {
    	for(int i = strlen(a) - 1; i >= 0; i--)
    		for (int j = strlen(b) - 1; j >= 0; j--)
    		{
    			int t = (a[i] - '0') * (b[j] - '0')+ c[i + j + 1];
    			c[i + j + 1] = t % 10;
    			c[i + j ] += t / 10;
    		}
    }
    int main() {
    
    	char a[100] = "\0", b[100] = "\0";
    	printf("输入a数组:");
    	gets(a);
    	printf("输入b数组:");
    	gets(b);
    	len = strlen(a) + strlen(b);
    	cheng(a, b);
    	//printf("%c $", a[2]);
    	int i;
    	if (c[0] == 0)i = 1;
    	else
    		i = 0;
    	for (; i < len; i++) {
    		printf("%d", c[i]);
    	}
    }
    

     

    展开全文
  • 大整数乘法c语言

    2014-07-13 22:58:04
    /*乘法核心算法*/ void multip(_ndctl *ctl_result, _ndctl *ctl1, _ndctl *ctl2) { _node *pnt1=ctl1->head; _node *pnt2=ctl2->head; int add=0; int temp=0; int temp1; _node *qt=ctl_result->head; _...
    </pre><pre name="code" class="plain">#include<stdio.h>
    #include<stdlib.h>
    char fuhao='+';
    /*数据节点*/
    typedef struct node
    {
        int data;
        struct node * next;
    }_node;
    /*链表控制结构*/
    typedef struct
    {
        _node *head;
        _node *tail   ;
        int      ndcnt;
    }_ndctl;
    
    /**********************************multip function*************************************************/
    /***************************************************************************************************/
    
    /************print************/
    void print_num(_ndctl *ctl)
    {
        int flag=0;
        _node *pnt;
        pnt = ctl->head;
        while(pnt!=NULL){
            if(pnt->data==flag){
                pnt=pnt->next;
                continue;
            }
            flag=-1;
            printf("%d",pnt->data);
            pnt=pnt->next;
        }
        if(flag==0){
            printf("0");
        }
        printf("\n");
    }
    /*乘数的输入保存*/
    void create_num(_ndctl *ctl,char *fuhao)
    {
    
        int       data = 1       ;
        _node  *pnt  =NULL ;
        char    c      ='s';
    
        while((c= getchar())!='\n'){
    
            if(c=='-'){
                *fuhao=c;
                continue;
            }
    
            if(c>='0'&&c<='9'){
                 data    =  c-'0';
                 pnt=(_node *)malloc(sizeof(_node));
                 if(pnt==NULL){
                     printf("malloc failed!");
                 return;
                 }
    
                 pnt->data=data;
                 pnt->next=ctl->head;
                 ctl->head=pnt;//头插法构建栈
                 ctl->ndcnt++;
    
            }else{
                printf("your input is illegal !\n");
                exit(1);
            }
        }
    }
    /*为结果链表预先申请空间,比较安全*/
    void result_malloc(_ndctl *ctl_result,int cnt)
    {
        int flag=0;
        _node *pnt;
        while(flag<cnt){
            pnt=(_node*)malloc(sizeof(_node));
            if(pnt==NULL){
                printf("malloc filed!\n");
                return;
            }
            pnt->data=0;
            pnt->next=ctl_result->head;
            ctl_result->head=pnt;//头插法构建栈
            ctl_result->ndcnt++;
            flag++;
        }
    }
    /*链表逆序*/
    void nixu_list(_ndctl * ctl)
    {
        _node *h1,*h2,*h3;
        h1=ctl->head;
        h2=ctl->head->next;
        h3=h2->next;
        h1->next=NULL;
        while(h3){
            h2->next=h1;
            h1=h2;
            h2=h3;
            h3=h2->next;
            if(h3==NULL){
            h2->next=h1;//当h3为空时,h2为最后一个节点,只需让他指向倒数第二个节点 就完成了逆序
            }
    
        }
        ctl->head=h2;
    
    }
    
    /*乘法核心算法*/
    void multip(_ndctl *ctl_result, _ndctl *ctl1, _ndctl *ctl2)
    {
        _node *pnt1=ctl1->head;
        _node *pnt2=ctl2->head;
    
        int add=0;
        int temp=0;
        int temp1;
    
        _node *qt=ctl_result->head;
        _node *pnt_result=NULL;
    
        while(pnt2!=NULL){
    
            pnt_result=qt;
    
            while(pnt1!=NULL){
                temp=pnt1->data*pnt2->data+add;
                temp1=pnt_result->data+temp;
                pnt_result->data=(temp1%10);
                add=temp1/10;//进位
                pnt1=pnt1->next;
                pnt_result=pnt_result->next;
            }
    
            pnt_result->data+=add;
            add=0;
    
            pnt1=ctl1->head;
            pnt2=pnt2->next;
    
            qt=qt->next;
    
    
        }
        nixu_list(ctl_result);
    }
    /*free 存储空间*/
    void free_fun(_ndctl *ctl)
    {
        _node *pnt=NULL;
        _node *qt  =NULL;
        pnt=ctl->head;
        while(pnt!=NULL){
            qt=pnt;
            pnt=pnt->next;
            free(qt);
        }
    
    }
    
    
    
    
    
    
    
    
    
    /***********************begin main********************/
    int main()
    {
        char fuhao1=' ';
        char fuhao2=' ';
        _ndctl num1={NULL,0,0};//乘数
        _ndctl num2={NULL,0,0};//被乘数
        _ndctl result={NULL,0,0};//结果
        int      cnt   =  0;
        printf("please input first num:");
        create_num(&num1,&fuhao1);
    
        printf("please input second num:");
        create_num(&num2,&fuhao2);
    
        cnt=num1.ndcnt+num2.ndcnt;
        result_malloc(&result, cnt);
        multip(&result,&num1,&num2);
        printf("the result is: ");
        if(fuhao1!=fuhao2){
            printf("-");
        }
        print_num(&result);
        free_fun(&num1);
        free_fun(&num2);
        free_fun(&result);
        return 0;
    }
    
    
    
    
    
    
    
    
    

    展开全文
  • 问题TIM截图20190309205944.png编译运行环境Visual C++ 6.0 ,Windows 10测试代码#include int main(){short si = -32768;unsigned short usi = si;int i = si;unsigned int ui = usi;//int a = 15;...
  • C语言用移位、异或、与运算实现加法一、说明计算机整数的加减乘除就是依靠位运算实现的。比如整数的运算:加法:通过异或、与、移位实现;减法:a-b其实就是a+(-b);乘法:5*3其实就是5+5+5;除法:7/2其实就是用7...
  • C语言中超大整数乘法运算》由会员分享,可在线阅读,更多相关《C语言中超大整数乘法运算(8页珍藏版)》请在人人文库网上搜索。1、C 语言中超大整数乘法运算在计算机中,长整型 (long int) 变量的范围是 -2147483648...
  • 大整数乘法c语言

    2008-10-04 15:50:56
    一个小小的程序。关于大整数乘法。希望对大家有用。用c语言写的。c中没有大整数类,所以这种乘法只能自己写。
  • 采用数组实现的200位大整数乘法,代码十分简洁,不到100行。对c语言学习很有帮助~
  • 大整数乘法C语言

    千次阅读 2013-11-13 13:07:10
    大整数乘法 一、C程序源码 #include #include #include"string.h" #define len 20 int main() { int i,j,t,n,temp; char mult1[len]; char mult2[len]; printf("Input two big numbers:\n"); scanf("%s %s",mult1...
  • #include#includeusing namespace std;int num(int u) //计算乘数的位数{int i,num;i=1;num=u/10;while(num!=0){u=num;num=u/10;i=i+1;}//cout<return i;}void MUL(int u,int i,int &...x)//将乘数分治{w=u/(pow...
  • 大整数乘法-C语言实现

    千次阅读 2013-09-14 11:35:51
    因为字符串高地址保存的是高 #include #include #include void BigMul(char *a,char *b) { int a_len=strlen(a); int b_len=strlen(b);... int *c=(int *)malloc(sizeof(int)*a_len);... int *d=(int *)mal
  • 大整数乘法C语言实现)int mul(int l1,int l2,int a1[101],int a2[101],int c[101]){//计算a1与a2的乘积,结果保存到c中,返回c的长度 int i,j; int y;//进位 int x;//乘积 int z;//余数 int w;//乘积结果的...
  • 通过C语言实现的长整数乘法,具体数据类型为链表,通过链表的递归折半相乘累加,求出两个整数的结果
  • C语言中超大整数乘法运算.docx.C 语言中超大整数乘法运算在计算机中,长整型 long int 变量的范围是 -2147483648 至 2147483647 ,因此若用长整型变量做乘法运算,乘积最多不能超过 10 位数。即便用双精度型 double ...
  • 自己编写的大整数乘法,可以处理任意的两个数相乘。C语言编写,仅供参考。
  • C语言中超大整数乘法运算.docx.C 语言中超大整数乘法运算在计算机中,长整型 long int 变量的范围是 -2147483648 至 2147483647 ,因此若用长整型变量做乘法运算,乘积最多不能超过 10 位数。即便用双精度型 double ...
  • 超大整数乘法运算——C语言

    千次阅读 2012-04-10 19:07:26
    超大整数乘法运算——C语言  在计算机中,长整型(long int)变量的范围是 -2147483648 至 2147483647,因此若用长整型变量做乘法运算,乘积最多不能超过 10位数。即便用双精度型(double)变量,也仅能...
  • 大整数乘法C

    2018-10-01 11:38:29
    大整数乘法C语言实现 希望能帮到你们 #include &lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;algorithm&gt; #include &lt;cstring&gt; #define MAX 210 using ...
  • C语言大整数乘法

    2012-02-06 23:33:46
    非本人原创 整理得来的 20个字 其实是个问题
  • 在科学计算中,无法计算非常的整数,于是就有大整数乘法问题。 (int存放4字节,float…已有的数据类型数据范围有限),硬件无法实现,只能靠软件(代码)实现了。 三.代码 #include<stdio.h> #include<...
  • C语言实现大整数乘法

    2008-11-30 10:39:58
    实现大数乘法,功能完善,使用方便易懂,大家加油下载啊啊啊 啊
  • 求两个不超过200位的非负整数的积。 输入: 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 输出: 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 ...
  • C语言中超大整数乘法运算 在计算机中长整型(long int)变量的范围是 -2147483648 至 2147483647因此若用长整型变量做乘法运算乘积最多不能超过 10位数即便用双精度型(double)变量也仅能保证 16 位有效数字的精度在...
  • C语言——大整数乘法

    千次阅读 2018-12-01 01:03:42
    求两个不超过200位的非负整数的积。 Input 输入有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 Output 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342...
  • C语言实现动态数组的大整数乘法

    千次阅读 2017-04-28 19:02:48
    描述: 要求你用C语言实现两个数相乘,这两个数字的位数可能很,而且还可能有不... 首先,大整数乘法的主要部分要知道: for (i = 0; i ; i++) for (j = 0; j ; j++) ans[i + j] += (int)(pA[i] - '0') *
  • 64位整数乘法 时间限制:1Sec内存限制:128 MB 题目描述: 求a乘b对p取模的值,其中1≤a,b,p≤1018 输入: 输入3个long long型整数,a,b,p 输出: 输出a*b%p的值 样例输入: 250182048980811753 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,659
精华内容 6,663
关键字:

大整数乘法c语言

c语言 订阅