51Nod-1027-大数乘法
发布时间:2021-05-29 12:27:39 所属栏目:大数据 来源:网络整理
导读:给出2个大整数A,B,计算A*B的结果。 Input 第1行:大数A 第2行:大数B (A,B的长度 = 1000,A,B = 0) Output 输出A * B Input示例 123456 234567 Output示例 28958703552 水题,不多解释了,就是字符串的处理! 代码C: #include stdio.h #include string.h
给出2个大整数A,B,计算A*B的结果。 水题,不多解释了,就是字符串的处理! 代码C: #include <stdio.h> #include <string.h> #define _MAX 1001 void Carrying(int tag,int i,int j,int *p); int main(int argc,const char * argv[]) { int product[2 * _MAX],i=0,j=0,numOneLen,numTwoLen,tag; char numOne[_MAX],numTwo[_MAX]; memset(product,0,sizeof(int) * 2 * _MAX); //初始化product数据为0 scanf("%s %s",numOne,numTwo); //存数据 numOneLen=(int)strlen(numOne); numTwoLen=(int)strlen(numTwo); //数据逆序 for (i=0; i<numOneLen/2; i++) { tag=numOne[i]; numOne[i]=numOne[numOneLen-1-i]; numOne[numOneLen-1-i]=tag; } for (i=0; i<numTwoLen/2; i++) { tag=numTwo[i]; numTwo[i]=numTwo[numTwoLen-1-i]; numTwo[numTwoLen-1-i]=tag; } //逐位相乘 for (i=0; i<numOneLen; i++) { for (j=0; j<numTwoLen; j++) { tag=((int)numOne[i]-48)*((int)numTwo[j]-48); Carrying(tag,i,j,product); //递归 } } //倒序输出结果 for (i=_MAX * 2 - 1; i>0; i--) { if (product[i]!=0) { break; //查找到第一个不等于0的跳出 } } for (j=i; j>=0; j--) { printf("%d",product[j]); } printf("n"); return 0; } //递归进位函数 void Carrying(int tag,int *p) { p[i+j]+=tag; if (p[i+j]>9) { tag=p[i+j]/10; p[i+j] %=10; Carrying(tag,i+1,p); //写成Carrying(tag,j+1,p);也成立,为了让i+j递增而已 } return ; } 题是很水,但是代码还是挺长的……OVER!!! (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |