C语言实现 蓝桥杯 算法提高 高精度乘法

试题 算法提高 高精度乘法

                                                                                  蓝桥杯试题解答汇总链接

资源限制

       时间限制:1.0s 内存限制:256.0MB


问题描述

       计算机真是最傻的东西;他都不能计算大于10^65-1的a*b,请你帮这个“最傻”的东西过关,否则它就真的只认识1和0了。


输入格式

       共两行;第一行输入一个整数a;第一行输入一个整数b。


输出格式

       共一行,一个表示a*b的整数。


样例输入

2147483647
2147483647

样例输出

4611686014132420609

数据规模与约定

10^65-1<a,b<10^201-1

代码

#include <stdio.h>
#include <string.h>
int main() {
	char num1[210], num2[210];// 每个数最长200位注意开的数组大小
	scanf("%s\n%s",num1,num2);
	int num[400] = {0}, i, j;// 因为是两个数相乘所以结果最大可能为400位 
	int len1 = strlen(num1), len2 = strlen(num2), ca, len; 
	len = len1+len2;// len1、len2分别代表num1、num2的长度 
	for(i = len2-1;i >= 0; --i) {
		ca = 0;// ca代表进位 
		for(j = len1-1;j >= 0; --j) {
			num[i+j+1] += (num1[j]-'0')*(num2[i]-'0');// 模拟手算相乘 
			ca = num[i+j+1]/10;// 求出进位 
			num[i+j+1] %= 10;// 保留本位的数字 
			num[i+j] += ca;// 向前进位 
		}
	}
	int f = 0;
	for(i = 0;i < len; ++i) {
		if(num[i]) {// 排除开头的0 
			f = 1;
		}
		if(f) {
			printf("%d",num[i]);
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章