首页 > 代码库 > wiki oi3117 高精度练习之乘法
wiki oi3117 高精度练习之乘法
题目描述 Description
给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。
输入描述 Input Description
读入两个用空格隔开的正整数
输出描述 Output Description
输出A*B的值
样例输入 Sample Input
3 12
样例输出 Sample Output
36
数据范围及提示 Data Size & Hint
两个正整数的位数不超过500位
代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 char a[500],b[500]; 8 int c[502],d[1500];//c存中间数据,d不断累加c得答案 9 int main()10 {11 memset(c,0,sizeof(c));12 memset(d,0,sizeof(d));13 cin>>a>>b;14 int alen=strlen(a)-1;15 int blen=strlen(b)-1;16 for(int i=alen; i>=0; i--)17 {18 int carry=0,carry1=0,k=0,m=0;//k作c的下标,m作d的下标,carry为c(乘)的进位,carry1为d(累加)的进位19 for(int j=blen; j>=0; j--)20 {21 int cc=(a[i]-‘0‘)*(b[j]-‘0‘)+carry;22 c[k++]=cc%10;23 carry=cc/10;24 }25 if(carry!=0)c[k++]=carry;//注意乘最后一位后可能还有进位26 // for(int n=k-1; n>=0; n--)printf("%d",c[n]);//查看c的中间数据27 // printf("\n");28 m=alen-i;29 for(int l=0; l<k; l++)30 {31 int cc=(d[m]+c[l])+carry1;32 d[m++]=cc%10;33 carry1=cc/10;34 }35 if(carry1!=0)d[m++]=carry1;//注意累加到最后一位后可能还有进位36 // for(int n=m-1; n>=0; n--)printf("%d",d[n]);37 // printf("\n");38 }39 for(int n=m-1; n>=0; n--)printf("%d",d[n]);40 printf("\n");41 return 0;42 }
wiki oi3117 高精度练习之乘法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。