循环法-求大数相乘

这个思想既简单,又实用真心不错,!

就是那种简便运算其实,

把一个数字拆分成各位,十位,百位等等,然后就可以确定结果到底在哪一位上了,

进位的时候就可以按照超出10 没有超出10 来计算了!

贴出代码:

没有写好呀...

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <string>

using namespace std;

char str_a[1111];

char str_b[1111];

int num_a[1111];

int num_b[1111];

int ans[3333];

int len_a;

int len_b;


void Init()
{
	memset(num_a, 0, sizeof(num_a));
	memset(num_b, 0, sizeof(num_b));
	memset(ans, 0, sizeof(ans));
}

void GetDigit()
{
	len_a = strlen(str_a);
	len_b = strlen(str_b);
//	cout << "len_a = " << len_a << endl;
//	cout << "len_b = " << len_b << endl;
	
	
	
	for (int i = 0; i < len_a; i++)
	{
		num_a[i] = str_a[len_a - 1 - i] - '0';
	}
	for (int i = 0; i < len_b; i++)
	{
		num_b[i] = str_b[len_b - 1 - i] - '0';
	}
}



void Solve()
{
	GetDigit();
	for (int i = 0; i < len_a; i++)
	{
		for (int j = 0; j < len_b; j++)
		{
			ans[i + j + 1] += num_a[i] * num_b[j];
//			cout << "i + j + 1" << i + j + 1 << endl;
//			cout << "ans = " << ans[i +j + 1] << endl;
		}
	}
	
	for (int i = 0; i < len_a + len_b; i++)
	{
		if (ans[i] >= 10)
		{
			ans[i + 1] += ans[i] / 10;
			ans[i] = ans[i] % 10;
		}
	}
	
	
	int cnt;
//	system("pause");
	for (cnt = len_a + len_b; cnt >= 0; cnt--)
	{
		if (ans[cnt])
		{
			break;
		}
	}
//	cout << "cnt = " << cnt << endl;
//	system("pause");
	for (int i = cnt; i >= 1; i--)
	{
		cout << ans[i];
	}
	cout << endl;
}	

int main()
{	
	cout << "Please input two numbers : " << endl;
	while(cin >> str_a >> str_b)
	{
		Init();
		Solve();
		cout << "Please input two numbers : " << endl;
	}
	system("pause");
	return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值