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

ZJUTOJ 1217 大数乘法

发布时间:2020-12-14 02:27:23 所属栏目:大数据 来源:网络整理
导读:? ? ? ? 大数乘法和加法类似,不过算法更为奥妙,此题还要注意标志位的选择! Description: 给定一些大数,请计算其积。 Input: 输入数据中含有一些整数对(对数≤1000),若某对整数(整数位数≤200)的值为0 0,则表示输入结束。 Output: 每对整数对应一个
? ? ? ? 大数乘法和加法类似,不过算法更为奥妙,此题还要注意标志位的选择!

Description:

给定一些大数,请计算其积。

Input:

输入数据中含有一些整数对(对数≤1000),若某对整数(整数位数≤200)的值为0 0,则表示输入结束。

Output:

每对整数对应一个乘法计算结果,输出该结果,每个结果输出完后应回车。

Sample Input:

2 3
12 34
0 0

Sample Output:

6
408
 
#
include<stdio.h>
#include<string.h>
#define max 200
int main()
{
	int i,j,len1,len2,flag1,flag2;
	int a1[max+20],a2[max+20],c[max*2+20];
	char str1[max+20],str2[max+20];
	
	while(scanf("%s%s",str1,str2) )
  {  if(strcmp(str1,"0")==0 && strcmp(str2,"0")==0 )//注意怎么判断结束
     break;
     if(strcmp(str1,"0")==0 )//判断如果有等于零的情况怎么算
     printf("0");
     if(strcmp(str2,"0")==0 )
     printf("0");
         flag1=0;  //标志位必须在这里定义,每次循环清零,到后边输出的时候判断是否有负号!
	 flag2=0;
    if(str1[0]=='-')  
	{
	  flag1=1;  
	  str1[0]='0';
    } 
	if(str2[0]=='-')  
	{
	  flag2=1; 
	  str2[0]='0';
	}  
	memset(a1,sizeof(a1));
	memset(a2,sizeof(a2));
	memset(c,sizeof(c));
	len1=strlen(str1);
	len2=strlen(str2);
	for(j=0,i=len1-1;i>=0;i--)
	a1[j++]=str1[i]-'0';
	for(j=0,i=len2-1;i>=0;i--)
	a2[j++]=str2[i]-'0';
	for(i=0;i<len2;i++)//注意谁乘谁 
	{
		for(j=0;j<len1;j++)
		c[j+i]+=a2[i]*a1[j];	
	}
	for(i=0;i<max*2;i++)
	{
		c[i+1]+=c[i]/10;//容易缺少累加符号 
		c[i]=c[i]%10;
	}
	for(i=max*2+19;(i>=0)&&(c[i]==0);i--);
	if((strcmp(str1,"0")!=0 ))
	 {
	   if(strcmp(str1,"0")==0 )
	   if((flag1&&!flag2)||(!flag1&&flag2)) 
	   printf("-");
	  for(;i>=0;i--)
	  {
		  printf("%d",c[i]);
	  }	
    }
	printf("n");
  }
  	return 0;
}

(编辑:李大同)

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

    推荐文章
      热点阅读