描述
给定两个数字(0-9)字符串(长度不限)求它们的乘积。
输入描述:
第一行为第一个数字字符串

第二行为第二个数字字符串
输出描述:
乘积字符串
示例1
输入123
20
输出2460
题解:核心思想已经加粗,着急看题解的朋友可以直接看粗体内容
首先字符串相乘,首先考虑将其转换为整型数再进行乘法运算。在c语言中,标准库#include<stdlib.h>文件中,提供了标准函数atoi函数(ascii to integer)atol函数(ascii to long integer),用于字符串转换数字串
c++标准库#include中也提供了相应的std函数,由于本篇主讲c语言,c++函数就不过多描述了。
其次,我们提交代码之后会发现,测试点中存在030,020这样的案例,所以我们并不能直接使用转换函数一了了之,于是我们可以先择把一个字符串中大于零的字符和零分开将大于零的字符串转换成数字相乘输出然后统计两个字符串中零的个数,然后在乘积的末尾循环输出所有的零,这样便把超过c语言最大long long int的数据也轻松拆分了。
附上源码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
    char a[1000],b[1000],t[1000];
    int i,j=0,sum=0;
    long a_,b_;
    gets(a);
    gets(b);
    for(i=0;i<strlen(a);i++)
    {
        if(a[i]>='1'&&a[i]<='9') t[j++]=a[i];
        else if(a[i]=='0'&&j>0) sum++;
    }
    t[j]='\0';
    j=0;
    a_=atol(t);
    for(i=0;i<strlen(b);i++)
    {
        if(b[i]>='1'&&b[i]<='9') t[j++]=b[i];
        else if(b[i]=='0'&&j>0) sum++;
    }
    t[j]='\0';
    b_=atol(t);
    printf("%ld",a_*b_);
    for(i=0;i<sum;i++) printf("0");
    return 0;
 }