题意如下:
给定两个以字符串形式表示的非负整数 num1
和 num2
,返回 num1
和 num2
的乘积,它们的乘积也表示为字符串形式。
注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。
示例 1:
输入: num1 = "2", num2 = "3" 输出: "6"
示例 2:
输入: num1 = "123", num2 = "456" 输出: "56088"
提示:
1 <= num1.length, num2.length <= 200
num1
和num2
只能由数字组成。num1
和num2
都不包含任何前导零,除了数字0本身。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int my_atoi(char *a)//将字符串转化为数字
{
int lenth=strlen(a);
int ret=0,t=0;
for(int i=0;i<lenth;i++)
{
t=a[i]-'0';
ret*=10;
ret+=t;
}
return ret;
}
char* test(char *a,char *b)
{
int r1=my_atoi(a),r2=my_atoi(b);
cout<<"a=="<<r1<<" "<<"b=="<<r2<<endl;
int s=r1*r2;
int ss=s,t=0;
char q[100];
while(ss){
q[t++]=(ss%10)+'0';//将结果的每一位数字转化成字符
ss/=10;
}
char p[t];
for(int i=t-1,j=0;i>=0;i--,j++)//将字符串逆序回来
{
p[i]=q[j];
}
return p;
}
int main(){
char a[1000],b[1000];
cin>>a>>b;
cout<<"结果是"<<test(a,b)<<endl;
}
注:
C语言和C++中都有atoi()和atof()将字符串中的数字转化成数字,这里不直接使用,而是自己写;
在将结果重新转化成字符串时,我用了2次循环,不知道还有没有更好的办法,望各位赐教。