#include <stdio.h> #include <string.h> int my_strlen1(char* str) //自制一个可以得出数组成员个数的函数;便于准确得出“12300042310000”类似的数组排列的成员个数 { int a=0; for(int i=0;i<1000;i++) //适用于不超过1000个成员的数组 { if(str[i]!=0) a++; if(str[i]==0) { int b; for(b=i;b<1000;b++) { if(str[b]!=0) { a=a+b-i+1; i=b; break; } } if(b==100) break; } } return a; } int main() { //int a, b; //while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case // 64 位输出请用 printf("%lld") to //printf("%d\n", a + b); //} char a[100],b[100],data[1000]={0}; scanf("%s %s",a,b); int a0=0; //a0=strlen(a); for(a0=0;;a0++) { if(a[a0]==0) break; else if(a[a0]>57 || a[a0]<48) { printf("输入错误\n"); return 0; } } //printf("%d\n",a0); int b0=0; for(b0=0;;b0++) { if(b[b0]==0) break; else if(b[b0]>57 || b[b0]<48) { printf("输入错误\n"); return 0; } } //printf("%d\n",b0); if(a0>b0) { for(int i=0;i<b0;i++) { for(int j=a0;j>0;j--) { data[i+(a0-j)]+=((b[b0-1-i]-48)*(a[j-1]-48))%10; //取乘积个位 if(data[i+(a0-j)]>=10) //个位超出10 { data[i+(a0-j)]-=10; data[i+(a0-j+1)]+=1; } data[i+(a0-j+1)]+=((b[b0-1-i]-48)*(a[j-1]-48))/10; //取乘积十位 if(data[i+(a0-j+1)]>=10) //个位超出10 { data[i+(a0-j+1)]-=10; data[i+(a0-j+2)]+=1; } } } } else { for(int i=0;i<a0;i++) { for(int j=b0;j>0;j--) { data[i+(b0-j)]+=((a[a0-1-i]-48)*(b[j-1]-48))%10; //取乘积个位 if(data[i+(b0-j)]>=10) //个位超出10 { data[i+(b0-j)]-=10; data[i+(b0-j+1)]+=1; } data[i+(b0-j+1)]+=((a[a0-1-i]-48)*(b[j-1]-48))/10; //取乘积十位 if(data[i+(b0-j+1)]>=10) //个位超出10 { data[i+(b0-j+1)]-=10; data[i+(b0-j+2)]+=1; } } } } for(int i=my_strlen1(data)-1;i>=0;i--) printf("%d",data[i]); printf("\n"); return 0; }