大数运算(大数加法and大数乘法)
发布时间:2020-12-26 08:11:18 所属栏目:大数据 来源:网络整理
导读:大数模板 -- 万进制 为基础的 模板 #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 ?附上代码 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


