四:大数运算-乘法运算
2017-12-27 22:15
218 查看
问题:大数-乘法运算
题目描述
请计算两个整数相乘(数的范围为:0 <= num < 10 ^ 100)
输入
两个整数
输出
一个整数
样例输入
10000000
10000000
样例输出
100000000000000
题目描述
请计算两个整数相乘(数的范围为: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; }
相关文章推荐
- Java常用数字工具类 大数乘法、加法、减法运算(2)
- [算法题] 大数乘法运算
- java大数乘法的简单实现 浮点数乘法运算
- 单链表实现大数加法、大数减法、大数乘法、大数指数运算
- 大数乘法运算Java代码实现
- 大数运算之大数乘法
- Java工作利器之常用工具类(二)——数字工具类-大数乘法、加法、减法运算
- 大数乘法运算
- 大数乘法。大数运算。“无限大数字”乘法。大数乘法两种方法对比
- 大数运算之乘法函数
- 转载http://blog.csdn.net/yxnk:模拟大数乘法,将结果的每5位存在数组a[]中,以提高运算速
- 采用分治法进行大数乘法运算
- 大数运算之乘法
- 大数运算,队列实现大数 加法、乘法、除法、模除
- 模拟乘法运算之N的阶乘(大数阶乘)
- 大数高精运算-----乘法
- 大整数乘法,学数据结构之后对于小学期大数运算的改进
- 大数运算之加法乘法---JAVA实现
- (高精度运算4.7.21)UVA 10106 Product(大数乘法)
- 大数高精运算-----乘法