大数相乘 算法


写得复杂还时间超限  大写的尴尬

#include<iostream>
#include<string>
using namespace std;
char mult(char temps,char tempstr,int &tempmult)              //实现字符转化成整数相乘
{
	int temp;
	temp = (temps - '0') * (tempstr - '0') + tempmult;
	tempmult = temp / 10;
	return temp % 10 + '0';
}
char add(char temps,char tempstr,int &tempadd)
{
    int temp; 
	temp = (temps - '0') + (tempstr - '0') + tempadd;        //实现字符转化成整数相加
	tempadd = temp / 10;
	return temp % 10 + '0';
}
int main()
{
	string str,s,multstr;
	string s0,addstr;
	char c;
	int lenstr,lens,tempmult,tempadd,lens0,lenstr1;
	while (cin>>str>>s)
	{
		if(s.length() > str.length()) swap(s, str);
		multstr = str;
		lenstr = str.length();
		lens = s.length();
		s0 = "0";
		addstr = "";
		for (int i = lens - 1; i >= 0; i--)       //从s 字符串中逐个取字符 与str 字符串里面的相乘
		{
			tempmult = 0;
			str = multstr;
			for (int j = lenstr - 1; j >= 0; j--)           //取一位进行乘
			{
				str[j] = mult(s[i],str[j],tempmult);
			}
			str += addstr; //到第 i 位与字符串str 乘时  在后面补零的计算
			if(s0.length() > str.length())swap(str,s0);
			lens0 = s0.length();
			lenstr1 = str.length();
			lens0--;
			lenstr1--;
			c = '0';
			tempadd = 0;
			while (lenstr1 >= 0 )           //两大数相加
			{
				if(lens0 < 0) str[lenstr1] = add(c,str[lenstr1],tempadd);
				else
				{
					str[lenstr1] = add(s0[lens0],str[lenstr1],tempadd);
					lens0--;
				}
				lenstr1--;
			}
			s0 = str;	
			addstr += '0';  //统计要补的零
		}
		cout<<s0<<endl;
	}
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值