1. 程式人生 > >C語言實現多達50位數相乘的運算

C語言實現多達50位數相乘的運算

/*
 * 檔名:multiply.c
 * 功能:實現支援50位數乘以50位數<用bc命令驗證結果>
 * 編輯人:王廷雲
 * 編輯時間:2017-12-20
*/
#include <stdio.h>
#include <string.h>

#define      NR        50

void reserverString(char *s);

int main(void)
{
    //+1===>'\0'
    char  v1[NR+1],v2[NR+1],sum[2*NR+1]={0};

    printf("輸入乘數  :");
    scanf
("%s",v1); printf("輸入被乘數:"); scanf("%s",v2); ///////////////////////////// //字串翻轉(資料低位在低下標) reserverString(v1); reserverString(v2); //printf("v1:%s\n",v1); //printf("v2:%s\n",v2); int i,j,num,flag; for(i=0;v1[i];i++)//乘數 { for(j=0;v2[j];j++)//被乘數 { //乘數I位 乘以 被乘數的J位 累加在積的I+J位
sum[i+j]=sum[i+j]+(v1[i]-'0')*(v2[j]-'0'); } //檢查積是否可進位 flag=0; for(j=0;j<2*NR;j++) { num=sum[j]+flag; flag=num/10; sum[j]=num%10; } } ///////show result///////////// printf("積:"); for(i=2*NR;i>0;i--)//去除前導0 { if
(sum[i]!=0) break; } while(i>=0) { printf("%d",sum[i]); i--; } putchar('\n'); return 0; } void reserverString(char *s) { int i,len=strlen(s); char temp; for(i=0;i<len/2;i++) { temp=s[i]; s[i]=s[len-1-i]; s[len-1-i]=temp; } }