直接上代码:(没有对0的特判,MultiplyAandC为乘法函数,需要传入数组A,数组A的长度,数组C,数组C的长度,结果存储在C中,函数返回值为C的长度)
#include<stdio.h> #include<string.h> #include<stdlib.h> #define N 1005 int a[1005]={}; int b[1005]={2}; int c[1005]={}; int compare(int a[],int len1,int c[],int len2) { if(len1>len2) { return 1; } else if(len2>len1) { return -1; } int i,j,k; for(i=len1-1;i>=0;i--) { if(a[i]>c[i]) { return 1; } else if(a[i]<c[i]) { return -1; } } return 0; } int multiAandC(int a[],int len1,int c[],int len2) { int d[1005]={}; memset(d,0,sizeof(d)); int i,j,k; for(i=0;i<len1;i++) { for(j=0;j<len2;j++) { d[i+j]+=(a[i]*c[j]); } } for(i=0;i<len1+len2;i++) { if(d[i]>=10) { d[i+1]+=(d[i]/10); d[i]%=10; } } while(d[i]==0) { i--; } memset(c,0,sizeof(c)); len2 = i+1; for(j=i;j>=0;j--) { c[j]=d[j]; } return len2; } int main() { int t; scanf("%d",&t); int i,j,k,l; char str[1005]=""; int len1,len2; for(i=0;i<t;i++) { scanf("%s",str); len1 = strlen(str); k=0; for(j=len1-1;j>=0;j--) { a[k]=(str[j]-'0'); k++; } memset(c,0,sizeof(c)); c[0]=1; len2=1; int count = 0; //a:目标 a小于c返回-1,大于C返回1 while(compare(a,len1,c,len2)==1) { len2 = multiAandC(b,1,c,len2); count++; } //没有对0的特判 printf("%d\n",count); } }
大数乘法+大数比较
最新推荐文章于 2024-10-02 22:16:48 发布
文章描述了一个C语言程序,包含两个函数:compare用于比较两个数组元素,multiAandC用于将数组A中的元素与数组C逐位相乘并将结果存入C。main函数中处理输入字符串,根据比较结果调整数组C,最后输出相乘次数。
摘要由CSDN通过智能技术生成