吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2875|回复: 8
收起左侧

[C&C++ 转载] 挑战大数乘法,菜鸟的愤怒!

[复制链接]
追梦少年_66 发表于 2017-11-16 12:16
大数乘法是高手的必经之路

[Asm] 纯文本查看 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void  bigNum(char * str1, char *str2,char * res) {

	int length1 = strlen(str1);//求str1长度
	int length2 = strlen(str2);//求str2长度

	char  jieguo[2048] = { 0 };//缓冲区
	for (int i = length2 - 1,m=0; i >= 0; i--,m++) {//将str2每一位分别与str1每一位相乘,关键是相乘后的数,从后往前计数str2的第m位与str1的第n位相乘后加上jieguo[m+n]之前的数并存放在jieguo[m+n]中,判断jieguo[m+n]是否进位。
		for (int j = length1 - 1,n = 0; j >= 0; j--,n++) {  
			int temp = jieguo[m + n]+(str2[i] - '0') * (str1[j] - '0');
			jieguo[m + n + 1]  += temp / 10;
			jieguo[m + n] = temp % 10;
		}
	}
	//对调缓冲区,存入res字符串数组中。
	int i = 2047;
	while (jieguo[i] == 0) {
		i--;
	}
	for (int k = i,r=0; k >= 0; k--,r++) {
		res[r] = (char)jieguo[k] + 48;
	}

}

void maintt() {

	char str1[1024];
	char str2[1024];

	scanf("%s", str1);
	scanf("%s", str2);
	char res[2048] = { 0 };

	bigNum(str1, str2, res);
	printf("%s", res);
	system("pause");
}
////方法二,递归
void bignum2(char * str1, char *str2,char * arr, int length) {//arr为结果数组
	if (length == 0) {
		int i = 2047;
		while (arr[i] == 0) {
			i--;
		}
		for (int j = 0; j <= i / 2; j++) {
			char temp = arr[j]+'0';
			arr[j] = arr[i - j]+'0';
			arr[i - j] = temp;
		}

		return;
	}
	else {
		int length1 = strlen(str1);
		int length2 = strlen(str2);

		for (int i = length1 - 1, m = 0; i >= 0; i--, m++) {
			int temp = arr[m + length2 - length] + (str2[length - 1] - '0')*(str1[i] - '0');
			arr[m + length2 - length] = temp % 10;
			arr[m + length2 - length + 1] += temp / 10;
		}
		bignum3(str1, str2,arr, length - 1);

	}
}
void main() {
	char str1[1024];
	char str2[1024];
	char arr[2048] = { 0 };
	scanf("%s", str1);
	scanf("%s", str2);
	char res[2048] = { 0 };

	bignum3(str1, str2, res, strlen(str2));
	printf("%s", res);
	system("pause");

}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
dspowj + 1 + 1 菜鸟的愤怒

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 追梦少年_66 发表于 2017-11-18 23:13
51ai 发表于 2017-11-17 14:45
66行、78行的bignum3是不是应该是 bignum2?

哈哈哈,这都被你发现了
yuehanoo 发表于 2017-11-16 12:35
 楼主| 追梦少年_66 发表于 2017-11-16 12:47
liubian 发表于 2017-11-17 09:39
感谢分享
51ai 发表于 2017-11-17 14:45
本帖最后由 51ai 于 2017-11-17 14:46 编辑

66行、78行的bignum3是不是应该是 bignum2?
天道法海 发表于 2017-11-17 19:11
66666,社会,社会。。。。。短短几十行代码,让我深深感受到了浓重的社会气息。
 楼主| 追梦少年_66 发表于 2017-11-17 20:24
天道法海 发表于 2017-11-17 19:11
66666,社会,社会。。。。。短短几十行代码,让我深深感受到了浓重的社会气息。

错,这是菜鸟的愤怒
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 08:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表