C語言實現多達50位數相乘的運算
阿新 • • 發佈:2019-02-06
/*
* 檔名: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;
}
}