zoukankan      html  css  js  c++  java
  • 大数相乘

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define N 100
    void GetDigits(int *a,char *s);
    void multiply(int *a,int *b,int *c);
    main()
    {
        char s1[N],s2[N];
        int i,j,a[N],b[N],c[N*2];
    
        printf("
     input number a: ");
        scanf("%s",s1);
        printf("
     input number b: ");
        scanf("%s",s2);
    
    
        //把输入的字符串,按位存放到数组 
        GetDigits(a,s1);
        GetDigits(b,s2);
    
        multiply(a,b,c);
    
        //找到最高位
        j=N*2-1;
        while(c[j]==0)
            j--;
    
       //打印计算结果
        printf("
     %s * %s=",s1,s2);
        for(i=j;i>=0;i--)
            printf("%d",c[i]);
    }
    
    /*把字符串形式的数字按位存放到数组*/
    void GetDigits(int *a, char *s)
    {
       int i;
       char digit;
       int len=strlen(s);
       for(i=0;i<N;i++)
        *(a+i)=0;
       for(i=0;i<len;i++)
       {
            digit=*(s+i);
            *(a+len-1-i) = digit - '0';
       }
    }
    
    /*把a*b的结果存储到数组c中,按位表示*/
    void multiply(int *a,int *b,int *c)
    {
         int i,j;
          //先把结果数组设置为0zsw
         for(i=0;i<N*2;i++)
              *(c+i)=0;
    
         for(i=0;i<N;i++)
               for(j=0;j<N;j++)
                      *(c+i+j)+=*(a+i) * *(b+j);
    
        // 处理进位
         for(i=0;i<N*2-1;i++)
         {
               *(c+i+1)+=*(c+i)/10;      //进位累加到高位
               *(c+i)=*(c+i)%10;          //该位的最后结果
         }
    }



      

  • 相关阅读:
    微软面试100 题题解
    二元查找树转变成排序的双向链表(树)
    筆試
    PE注入
    内核网络通信
    哈哈哈
    OpenCV 学习
    第一次研究VM程序中的爆破点笔记
    SE2.3.4各试用限制调试笔记
    破解相关书籍
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5233552.html
Copyright © 2011-2022 走看看