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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |