题解 | #字符串相乘#

字符串相乘

http://www.nowcoder.com/practice/ff74b3d786de4a30b4cd49b8ad97467f

描述
给定两个数字(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;
 } 
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 16:32
quench@0916:一顿操作猛如虎,一看工资2500
点赞 评论 收藏
分享
屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
04-25 19:29
已编辑
宁波大学 测试开发
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务