加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数运算(大数加法and大数乘法)

发布时间:2020-12-26 09:13:31 所属栏目:大数据 来源:网络整理
导读:大数模板 -- 万进制 为基础的 模板 #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();//	输出 
	}
} 

大数运算(大数加法and大数乘法)





就是这样 ? ?那让我们来实战一下 ?hdu1002 A+BII

A + B Problem II

Time 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
  
  

?附上代码

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读