您的位置:首页 > 其它

四:大数运算-乘法运算

2017-12-27 22:15 218 查看
问题:大数-乘法运算

题目描述


请计算两个整数相乘(数的范围为:0 <= num < 10 ^ 100)
输入

两个整数
输出

一个整数
样例输入

10000000

10000000
样例输出

100000000000000

#include<stdio.h>
#include<string.h>
#define M 1000000
int Inter_Sum[M];
int Inter_jie[M];
int g;
//char Inter_Char[M];
void fun(int str1[],int str[],int s,int p){
int t,m=0,i=0,two=0;
int k=0;
/*printf("1\n");
for( int j=s-1;j>=0;j--){

printf("%d ",str1[j]);
}
printf("\n");
printf("2\n");
for( int j=p;j>=0;j--){
printf("%d ",str[j]);
}
printf("\n");*/
while(i<s){
if(two<=p)
t=(str1[i])+(str[two])+m;

else {
t=(str1[i])+m;
}
//printf("t=%d i=%d two=%d\n",t,i,two);
//printf("str1[i]=%d str[two]=%d\n",str1[i],str[two]);
if(t<10){
Inter_Sum[k]=t;
m=0;
}else{
Inter_Sum[k]=t%10;
m=t/10;
}
k++;
two++;
if(i==s-1&&m!=0)Inter_Sum[k++]=m;
i++;
}

//printf("\n");
g=k;
}
void f(char str1[],char str2[]){
int t,p=0,i=strlen(str1);
//int Inter_jie[10000][10000];
memset(Inter_Sum,-1,sizeof(Inter_Sum));
int k,j,l;
int index=0;
while(1){
for(k=strlen(str2)-1;k>=0;k--){
int m=0;
int p=strlen(str2)-1-k;
//printf("str2[k]=%d\n",str2[k]-48);
l=p;
//printf("l=%d\n",l);
while(l--)Inter_jie[l]=0;
for(j=strlen(str1)-1;j>=0;j--){
t=(str1[j]-48)*(str2[k]-48)+m;
//printf("t=%d\n",t);
if(t<10){
Inter_jie[p]=t;
m=0;
}else{
Inter_jie[p]=t%10;
m=t/10;
}
//printf("t=%d\n",t);
p++;
if(j==0&&m!=0)Inter_jie[p++]=m;
}

/*for( int j=p-1;j>=0;j--){

printf("%d ",Inter_jie[j]);
}
printf("\n");*/
while(Inter_Sum[index++]!=-1);
fun(Inter_jie,Inter_Sum,p,index-2);
//printf("index=%d\n",index);
}
//printf("p=%d\n",p);
break;
}
//printf("index=%d\n",index);

}
int main(){

char str1[M];
char str2[M];
//memset(Inter_Sum,0,sizeof(Inter_Sum));
int i=0,j=0;
scanf("%s %s",str1,str2);
str1[strlen(str1)]='\0';
str2[strlen(str2)]='\0';
//printf("%d %d\n",strlen(str1),strlen(str2));
if(strlen(str1)>=strlen(str2))
f(str1,str2);
else f(str2,str1);
for(j=g-1;j>=0;j--){
printf("%d",Inter_Sum[j]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: