87.
1.大整数数相乘的问题。(这是 2002 年在一考研班上遇到的算法题)
#include<iostream> #include<stdio.h> using namespace std; int lenA,lenB; void Multiple(char A[], char B[], char C[]) { int i,j,k,tmp,lenC,index; lenC=lenA+lenB-1; for(int i=lenB-1;i>=0;i--) { index=lenC--; k=0; if(B[i]!='0') { for(j=lenA-1;j>=0;j--) { tmp=(C[index]-'0')+(A[j]-'0')*(B[i]-'0')+k; C[index--]=tmp%10+'0'; k=tmp/10; } C[index]=k+'0'; } } } int main() { int i; char a[100],b[100],c[100]; while(1) { printf("请输入要输入的两个乘数(-1结束):\n"); scanf("%s",a); if(strcmp(a,"-1")==0) break; scanf("%s",b); lenA=strlen(a); lenB=strlen(b); for(int k=0;k<lenA+lenB;k++) c[k]='0'; c[lenA+lenB]='\0'; Multiple(a,b,c); printf("%s * %s = ",a,b); i=0;//输出 首先去除前导0 while(c[i]=='0') i++; for(;c[i]!='\0';i++) printf("%c",c[i]); printf("\n"); } } /* 1 1 2 12 12 1 1111 1111 21839244444444448880088888889 38888888888899999999999999988 -1 */