您的位置:首页 > 其它

C练习_大数(数字字符串)相乘

2018-02-23 16:07 337 查看
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int mul(int a[],int b[], int res[]);
int str_to_arr(char *str, int *arr);
#define N 100    //定义输入数字的最大位数
int main(void)
{
int a
,b
,res[2*N];
char stra
,strb
;
memset(a,0,N*sizeof(int));
memset(b,0,N*sizeof(int));
memset(res,0,2*N*sizeof(int));
scanf("%s",stra);
scanf("%s",strb);

str_to_arr(stra,a);
str_to_arr(strb,b);
int i;
for(i=mul(a,b,res);i>=0;i--)
{
printf("%d",res[i]);
}
}
//数字字符串转数组
int str_to_arr(char *str, int *arr)
{
int i=0,len=0;
while(str[i]!='\0' && i<N)
{
if (str[i]>='0' && str[i]<='9')
i++;
}
len=i;
for(;i>0;i--)
{
arr[i-1]=str[len-i]-'0';
}
return len;
}
//大数a和b相乘得到res,返回res的长度,res必须为空,否则会累加入原值
int mul(int a[],int b[], int res[])
{
int i,j,m;
int tmp;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
tmp = a[i] *b [j];
res[i+j] += (tmp%10);
res[i+j+1] += (tmp/10);
}
for(m=0;m<2*N;m++)
{
if(res[m]>=10)
{
res[m+1] += (res[m]/10);
res[m] %= 10;
}
}
}
for(i=2*N-1;i>=0;i--) if (res[i]!=0) return i;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: