A * B(大きな数の乗算)の研究ノート

問題の説明

乗算20010 A A及びB * B.整数最大の正の小数を計算します

サンプル入力

1259

8

サンプル出力

10072

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int ans[40020] = {'\0'}, num_fir[20020] = {'\0'}, num_sec[20020] = {'\0'};
int main(void){
/*
	注意对于string型 
	最好不要用printf和scanf 
	要用cout和cin来输入输出 
*/	
	string fir_str, sec_str;
	cin>>fir_str>>sec_str;
	
	int len_a = fir_str.length();
	int len_b = sec_str.length();
/*	
	倒叙存储 便于从低位开始乘法	
*/	
	for(int i = 0; i < len_a; i++) num_fir[len_a - i - 1] = fir_str[i] - '0';
	for(int i = 0; i < len_b; i++) num_sec[len_b - i - 1] = sec_str[i] - '0';
/*	TEST
	for(int i = 0; i < len_a; i++){
		
		printf("%d", num_fir[i]);
	}
*/	
	for(int i = 0; i < len_a; i++){
		
		for(int j = 0; j < len_b; j++){
			
			ans[i + j] += num_fir[i]*num_sec[j];
			if(ans[i + j] >= 10){
				
				ans[i + j + 1] += ans[i + j]/10;
				ans[i + j] %= 10;
			}
		} 
	} 
/*	
	要考虑需要进位
	进位的部分如果非0,
	那打印的时候长度应当比原本加1	
*/	
	int sum;
	if(ans[len_a + len_b - 1]) sum = len_a + len_b - 1;
	else
		sum = len_a + len_b - 2; 
	
	for(int i = sum; i >= 0; i--){
		
		printf("%d", ans[i]);
	}
	printf("\n");
	return 0;
} 
リリース元の2件の記事 ウォンの賞賛0 ビュー24

おすすめ

転載: blog.csdn.net/weixin_43778198/article/details/104477989