- 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。
#include <stdio.h> #include <string.h> //反转字符串 void revstr(char *a) { int i; char temp; int l=strlen(a); for(i=0;i<l/2;i++){ temp=a[i]; a[i]=a[l-i-1]; a[l-i-1]=temp; } } int main(void) { char a[500],b[500]; char c[10001]; //输入两个字符串 scanf("%s%s",a,b); //求得两个字符串的长度 int la=strlen(a); int lb=strlen(b); //反转两个字符串 revstr(a); revstr(b); int i,j,cp; //给字符数组c初始化 for(i=0;i<la+lb+1;i++){ c[i]=0; } for(j=0;j<lb;j++){ cp=0; for(i=0;i<la;i++){ //如果要插入的位置为0,那么正常填充 if(c[i+j]==0){ c[i+j]=(a[i]-'0')*(b[j]-'0')+cp; } //如果要插入的位置不为0,那么需要相加之后再填充 else{ c[i+j]=(a[i]-'0')*(b[j]-'0')+cp+c[i+j]-'0'; } cp=0; //如果当前的位置>=10,那么需要进位 if(c[i+j]>=10){ cp=(c[i+j])/10; c[i+j]=c[i+j]%10; } //将这个位置的字符加'0' c[i+j]+='0'; } //当所有的元素都相乘之后,如果进位cp不为0那么需要进位 if(cp!=0){ if(c[i+j]==0){ c[i+j]=cp+'0'; } else{ c[i+j]+=cp; } } } revstr(c); printf("%s",c); return 0; }
两个大整数相乘
最新推荐文章于 2020-01-14 17:18:26 发布