大数运算(大数加法and大数乘法)
发布时间:2020-12-26 05:04:33 所属栏目:大数据 来源:网络整理
导读:大数模板 -- 万进制 为基础的 模板 #include algorithm#include stdlib.h#include cstring#include iostream#include stdio.h#define ll long long#define MAXN 10000#define DELD 4using namespace std;int a[MAXN];int b[MAXN];struct Bignum{ int len; in
//大数乘法运算 #include<stdio.h> #include<string.h> #define MAXNUM 100000 char str1[MAXNUM],str2[MAXNUM]; int a[MAXNUM],b[MAXNUM]; int c[100][MAXNUM]; int len1,len2; void mmeset() { memset(str1,sizeof(str1)); memset(str2,sizeof(str2)); memset(a,sizeof(a)); memset(b,sizeof(b)); memset(c,sizeof(c)); } void input() { gets(str1); gets(str2); len1=strlen(str1); len2=strlen(str2); } void change_int(int a[],int b[],char str1[],char str2[]) { int i,j; /* 逆序 for(i=0,j=len1-1;j>=0;i++,j--){ a[i]=str1[j]-'0'; } for(i=0,j=len2-1;j>=0;i++,j--){ b[i]=str2[j]-'0'; }*/ for(i=0;i<len1;i++){ a[i]=str1[i]-'0'; } for(i=0;i<len2;i++){ b[i]=str2[i]-'0'; } } void multiplication() { int temp=0,ll=0; int i,j; for(i=len2;i>=0;i--) { for(j=len1,ll=0;j>=0;j--) { temp=b[i]*a[j]; // printf("%d Temp=%d ",j,temp); c[i][i+j+1]=(temp+ll)%10; // printf("%d i+j=%d ",c[i][i+j+1],i+j); ll=(temp+ll)/10; // printf("%dn",ll); } c[i][i+j+1]=ll; } for(i=len1+len2,ll=0;i>=0;i--)//每一项的 结果加起来 类似于加法运算 { temp=0; for(j=0;j<len2;j++) { temp+=c[j][i]; } c[len2][i]=(temp+ll)%10; //答案放在 len2 行里 ll=(ll+temp)/10; } } void output() { int i; for(i=0;i<len1+len2+1;i++) { if(c[len2][i]==0&&i==0)//如果第一项是0 跳过去 continue; printf("%d",c[len2][i]);// 答案在len2 行 } printf("n"); } int main() { int i,k; while(printf("输入 A and Bn")) { mmeset();//清零操作 input();//输入 change_int(a,b,str1,str2);// 输入后 将 char--> int multiplication();//乘法运算 // for(i=0;i<len2+1;i++) 这里是 把 二维数组输出一下更直观 // { // for(j=0;j<=len1+len2+1;j++) // printf("%d,c[i][j]); // printf("n"); // } output();// 输出 } } 就是这样 ? ?那让我们来实战一下 ?hdu1002 A+BII A + B Problem IITime Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 343602????Accepted Submission(s): 66660 Problem Description I have a very simple problem for you. Given two integers A and B,your job is to calculate the Sum of A + B. ? Input The first line of the input contains an integer T(1<=T<=20) which means the number of test cases. Then T lines follow,each line consists of two positive integers,A and B. Notice that the integers are very large,that means you should not process them by using 32-bit integer. You may assume the length of each integer will not exceed 1000. ? Output For each test case,you should output two lines. The first line is "Case #:",# means the number of the test case. The second line is the an equation "A + B = Sum",Sum means the result of A + B. Note there are some spaces int the equation. Output a blank line between two test cases. ? Sample Input 2 1 2 112233445566778899 998877665544332211? Sample Output Case 1: 1 + 2 = 3 Case 2: 112233445566778899 + 998877665544332211 = 2222222222222221110 ?附上代码 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |